数据结构->栈和队列的基本操作

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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章