數據結構->棧和隊列的基本操作

1、用順序存儲定義棧結構。寫出這種存儲方式下的算法實現,包括:初始化棧、判棧爲空、出棧、入棧、求棧頂元素等運算,自己填寫主函數。

2、利用順序棧的基本操作,設計算法,實現將任意一個十進制整數轉化爲R進制整數

3、用順序存儲來定義循環隊列結構。編程實現,初始化隊列、判隊列爲空、出隊列、入隊列、求隊列頭部元素等運算,自己填寫主函數。

4、設計只有尾指針的單循環鏈表表示的隊列的入隊和出隊程序,並上機通過。

#include <stdio.h>
#include <stdlib.h>
#define maxn 100
typedef struct st
{
    int data[maxn];
    int top;
} stack;
typedef struct qu
{
    int data[maxn];
    int front,rear;
} queue;
void init(stack *st1)
{
    st1->top=-1;
    int data;
    scanf("%d",&data);
    while(data!=-1&&st1->top<maxn)
    {
        enstack(st1,data);
        scanf("%d",&data);
    }
}
int empty(stack st1)
{
    if(st1.top==-1)
        return 1;
    else
        return 0;
}
void enstack(stack *st1,int data)
{
    if(st1->top<maxn)
        st1->data[++st1->top]=data;
    else
        printf("棧已滿\n");
}
int  unstack(stack *st1)
{
    if(st1->top>=0)
    {
        int t=st1->data[st1->top--];
        return t;
    }
    else
        printf("棧已空\n");
    return 0;
}
int top(stack st1)
{
    if(st1.top>=0)
    {
        int t=st1.data[st1.top];
        return t;
    }
    else
        printf("棧已空\n");
    return 0;
}
void turnjz(stack *st1,int n,int tt)
{
    while(n)
    {
        enstack(st1,n%tt);
        n/=tt;
    }
}
void initq(queue *que)
{
    que->front=0;que->rear=0;
    int data;
    scanf("%d",&data);
    while(data!=-1&&(que->rear+1)%maxn!=que->front)
    {
        enqueue(que,data);
        scanf("%d",&data);
    }
}
void enqueue(queue *que,int data)
{
    if((que->rear+1)%maxn!=que->front)
       {
           que->data[que->rear]=data;
           que->rear=(que->rear+1)%maxn;
       }
    else
        printf("隊已滿\n");
}
int unqueue(queue *que)
{
    if(que->front!=que->rear)
    {
        int t=que->data[que->front];
        que->front=(que->front+1)%maxn;
        return t;
    }
    else
        printf("隊已空\n");
    return 0;
}
int front(queue que)
{
    if(que.front!=que.rear)
    {
        int t=que.data[que.front];
        return t;
    }
    else
        printf("隊已空\n");
    return 0;
}
int emptyq(queue  que)
{
    if(que.front==que.rear)
          return 1;
    else
        return 0;
}
int main()
{
    //stack
    stack sta1;

    init(&sta1);

    if(empty(sta1))
        printf("棧空\n");
    else
        printf("棧不空\n");

    printf("求棧頂 %d ",top(sta1));
    printf("top=%d\n",sta1.top);
    printf("出棧 %d ",unstack(&sta1));
    printf("top=%d\n",sta1.top);
    printf("求棧頂 %d ",top(sta1));
    printf("top=%d\n",sta1.top);
    printf("輸入入棧元素\n");
    int data;

    scanf("%d",&data);
    enstack(&sta1,data);

    printf("求棧頂 %d top=%d\n",top(sta1),sta1.top);
    stack turn;
    printf("輸入10進制數和要轉換的進制\n");
    int n,tt;
    scanf("%d %d",&n,&tt);
    init(&turn);
    turnjz(&turn,n,tt);

    while(!empty(turn))
    {
        printf("%d",unstack(&turn));
    }
    printf("\n");
    // queue
   queue que;
 que.front=que.rear=0;
   initq(&que);

   if(emptyq(que))
        printf("隊空\n");
    else
        printf("隊不空\n");

    printf("求隊頭 %d ",front(que));
    printf("front=%d\n",que.front);
    printf("出隊 %d ",unqueue(&que));
    printf("front=%d\n",que.front);
    printf("求隊頭 %d ",front(que));
    printf("front=%d\n",que.front);
    printf("輸入入隊元素\n");


    scanf("%d",&data);
    enqueue(&que,data);

    printf("求隊頭 %d front=%d\n",front(que),que.front);

    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define Elemtype int
typedef struct node
{
    Elemtype data;
    struct node *next;
}Lnode;
void creat(Lnode *h)
{
   int data;
   Lnode *p=h,*pp;
   scanf("%d",&data);
   while(data!=-1)
    {
        pp=(Lnode*)malloc(sizeof(Lnode));
        pp->next=NULL;
        pp->data=data;
        p->next=pp;
        p=pp;
    scanf("%d",&data);
    }
    p->next=h;
}
void bianli(Lnode *h)
{
    Lnode *p;
   p=h->next;
   while(p!=h)
   {
       printf("%d ",p->data);
       p=p->next;
   }
    puts("");
}
int  chudui(Lnode *h)
{

  int tt=h->next->data;
   h->next=h->next->next;
  return tt;
}
void rudui(Lnode *h,Lnode *tt)
{
    Lnode *p;
   p=h->next;
   while(p->next!=h)
   {
       p=p->next;
   }
  tt->next=p->next;
  p->next=tt;
}
int main()
{
   Lnode *h=(Lnode*)malloc(sizeof(Lnode));
   h->next=NULL;
   creat(h);
   printf("遍歷結果:");
   bianli(h);
    printf("請輸入隊元素\n");
    Lnode *tt=(Lnode*)malloc(sizeof(Lnode));
    scanf("%d",&tt->data);
    rudui(h,tt);
   printf("遍歷結果:");
   bianli(h);
    printf("出隊 %d\n",chudui(h));
     printf("遍歷結果:");
     bianli(h);
    return 0;
}


發佈了89 篇原創文章 · 獲贊 25 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章