循环队列的程序

#include <stdio.h>
#define MAX 10
#define TRUE 1


typedef struct
{
  int data[MAX];
  int front, rear;
  int isNull;
}Sequeue;

void Init(Sequeue *sq)
{
  sq->front=0;
  sq->rear=0;
  sq->isNull=1;
}

int Ins(Sequeue *sq,int x)
{
   if((sq->front+1)%MAX ==(sq->rear+1)%MAX && sq->isNull!=1)
   {
     printf("/nFull squeue!New data in the old position!/n");

     sq->rear=(sq->rear+1)%MAX;
     sq->data[sq->rear]=x;
     sq->front=(sq->front+1)%MAX;
   }
   else
   {
     sq->rear=(sq->rear+1)%MAX;
     sq->data[sq->rear]=x;
     printf("/nData in/n");
  sq->isNull=0;
     return(TRUE);
   }

   sq->isNull=0;
   return x;
}

 


int Del(Sequeue *sq,int x)
{
   if(sq->rear==sq->front && sq->isNull==1)
   {
    printf("the queue is empty/n");
    return NULL;
   }
   else
   {
    if((sq->rear)%MAX==(sq->front+1)%MAX)
  sq->isNull=1;
 sq->front=(sq->front+1)%MAX;
    x= sq->data[sq->front];
    printf("/nData out/n");
    return(x);
   }
}

 

int Print(Sequeue *sq)
{
   int k;


   if(sq->rear==sq->front && sq->isNull==1)
   {
    printf("the queue is empty/n");
    return NULL;
   }
   else
   printf("The sequeue is:/n");


    k=sq->front;
    do
    {
     k++;
     k=k%MAX;
     printf("-%d-",sq->data[k]);
    }while(k!=sq->rear);
  return 1;
}

 

main()
{


  Sequeue *head=(Sequeue*)malloc(sizeof(Sequeue));
  int c,x;

  clrscr();
  Init(head);
  
  do
  {
   printf("/n**********/nPlease select a number to input:/n1 insert a number/n2 delete a number/n3 print the squeue/n4 quit the program/n**********/n");
   c=getch();
   switch(c)
   {    case'1':
              printf("/nPlease Enter a number/n");
              scanf("%d",&x);
              Ins(head,x);
              break;


       case '2':
              Del(head,x);
              break;
       case'3':
              Print(head);
              break;
   }
  }while(c!='4');
  free(head);
 
}

多多指点 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值