采用顺序存储实现循环队列的初始化、入队、出队操作。

来源:互联网 发布:2016淘宝交易额是多少 编辑:程序博客网 时间:2024/04/27 01:56

 


//////////////////////下面为循环队列
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2

#define MAXQSIZE 100  /*队列的最大长度*/
typedef struct {
    int *base;   // 队列的元素空间头指针指示器
    int  front;                 
    int  rear;   /*尾指针指示器*/
}SqQueue;       

int InitQueue(SqQueue &Q) {//初始化操作
 Q.base = (int * )malloc(MAXQSIZE*sizeof(int));
 if (!Q. base) exit (OVERFLOW); 
 Q.front=Q.rear =0;
 return 1;
}

int EnQueue(SqQueue &Q) {//入队操作
 int e;
 if ((Q. rear+ 1) % MAXQSIZE == Q. front)
 {
  printf("队列已满,不能进队\n");
  return -1;//满标志
 }
 printf("请输入进队元素:");
 scanf("%d",&e);
 Q.base[Q.rear] = e;//进队
 Q.rear = (Q. rear + 1) % MAXQSIZE;//队尾指针后移
 return 1;
}

int DeQueue (SqQueue &Q) {//出队操作
 int e;
 if (Q. front == Q. rear) {
  printf("队列已经为空\n");
  return -1;
 }
 e = Q. base[Q. front];//队头出队
 printf("%d  出队\n",e);
 Q.front = (Q.front + 1) % MAXQSIZE;//队头下标后移
 return 1;
}
 
void tip()

 printf("*************\n");
 printf("*输入1 进队 *\n");
 printf("*输入2 出对 *\n");
 printf("*输入0 退出 *\n");
 printf("*请选择:    *\n");
 printf("*************\n");
}


int main()
{
 int k;
 SqQueue Q;
 InitQueue(Q);//初始化
 tip();
 while(scanf("%d",&k),k)
 {
  switch(k)
  {
  case 1:
   EnQueue(Q);
   tip();
   printf("操作完毕\n");
   break;
  case 2:
   DeQueue(Q);
   tip();
   printf("操作完毕\n");
   break;
  }
 }
 
 return 0;
}
////////////

 

原创粉丝点击