数据结构循环队列的实现c程序


//数据结构循环队列的实现c程序

#include<stdio.h>
#include<malloc.h>

struct link_cqueue
{
 int data;
    struct link_cqueue *next; 
};

//初始化循环链队列
struct link_cqueue *init_link_cqueue()
 {
   struct link_cqueue *rear;
   rear=NULL;    /*队尾指针设置为空*/  
   return rear;
 }

//(1)插入(即入队)算法:
struct link_cqueue *EnCQueue(struct link_cqueue *rear, int x)
{  //设循环链队列的队尾指针为rear,x为待插入的元素
   struct link_cqueue *p;
   p=(struct link_cqueue *)malloc(sizeof(struct link_cqueue));
   p->data=x;
   if(rear==NULL)  //如为空队,建立循环链队列的第一个结点
   {
    rear=p;
    rear->next=p;   //链接成循环链表
   }
   else  //否则在队尾插入p结点
   {
    p->next=rear->next;
    rear->next=p;
    rear=p;
   }
   return rear;
}
//(2)删除(即出队)算法:
struct link_cqueue *DeCQueue(struct link_cqueue *rear)
{  //设循环链队列的队尾指针为rear
 if (rear==NULL)  //空队
  printf("队列为空无法删除!\n");
 else if(rear->next==rear)  //队中只有一个结点
  rear=NULL;
 else
  rear->next=rear->next->next;  //rear->next指向的结点为循环链队列的队头结点
 return rear;
}

//循环队列的输出
void print_link_cqueue(struct link_cqueue *rear)
{
 struct link_cqueue *p;
 
 if(!rear)
  printf("队列为空!\n");
 else
 {
  printf("%5d",rear->next->data);
  p=rear->next;
     while(p!=rear)
  {
   printf("%5d",p->next->data);
   p=p->next;
  }
 }
 printf("\n");
}

main()
{
 struct link_cqueue *rear;
 int x;
 int c;
 rear=init_link_cqueue();
 do
 {
  printf("请选择入队或出队操作:1:入队;2:出队;3:输出!\n");
     scanf("%d",&c);
 
  if(c==1)
  {
   printf("请输入要入队的元素:");
   scanf("%d",&x);
   rear=EnCQueue(rear,x);
  }
  else if(c==2)
  {
   rear=DeCQueue(rear);
  }
  else if(c==3)
   print_link_cqueue(rear);
  else
   printf("选择错误,请重新选择");
 }while(1);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值