数据结构期末复习(さん)--循环队列定义及使用

  1 #include<iostream>
  2 using namespace std;
  3 #define Ok 1
  4 #define Error 0
  5 #define Overflow -1
  6 #define Maxsize 100
  7 typedef struct
  8 {
  9     int *base;   //存储空间基地址
 10     int front;   //头指针,每次在队头删除元素,front加1
 11     int rear;    //尾指针,每次在队尾插入元素,rear 加1
 12     int queuesize;
 13 } SqQueue;
 14 
 15 //初始化
 16 int Init_Queue(SqQueue &Q)
 17 {
 18     //构造一个最大存储空间为MaxSize的空循环队列Q
 19     Q.base = new int[Maxsize];
 20     if(!Q.base)        //存储分配失败
 21         exit(Overflow);
 22     Q.queuesize = Maxsize;
 23     Q.front = Q.rear = 0;  //头尾指针置为0,对列为空
 24     return Ok;
 25 }
 26 
 27 //求队列长
 28 int QueueLength(SqQueue Q)
 29 {
 30     return (Q.rear - Q.front + Maxsize) % Maxsize;
 31 }
 32 
 33 //入队
 34 int EnQueue(SqQueue &Q, int e)
 35 {
 36     if((Q.rear + 1) % Q.queuesize == Q.front)
 37         return Error; //队满
 38     Q.base[Q.rear] = e; //保存队头元素
 39     Q.rear = (Q.rear + 1) % Q.queuesize; //队头指针加1
 40     return Ok;
 41 }
 42 
 43 //出对
 44 int DeQueue(SqQueue &Q)
 45 {
 46     if(Q.front == Q.rear)  //队空
 47         return Error;
 48     Q.front = (Q.front + 1) % Q.queuesize;
 49     return Ok;
 50 }
 51 
 52 //取队头元素
 53 int GetHead(SqQueue Q)
 54 {
 55     if (Q.front != Q.rear)  //队非空
 56     {
 57         return Q.base[Q.front]; //返回队头元素的值,队头指针不变
 58     }
 59 }
 60 
 61 //输出
 62 void printqueue(SqQueue Q)
 63 {
 64     while(Q.front != Q.rear)
 65     {
 66         cout << GetHead(Q) << " ";
 67         Q.front = (Q.front + 1) % Q.queuesize;
 68         //DeQueue(Q);
 69     }
 70     cout << endl;
 71 }
 72 int main()
 73 {
 74     SqQueue q;
 75     Init_Queue(q);
 76     cout << "请输入数字:(0-3):0--退出,1--求表长,2--DeQue,3--EnQue
";
 77     for (int i = 0; i < 10; ++i)
 78         EnQueue(q, i);
 79     int c, d;
 80     for(int i = 0; i < 4; ++i)
 81     {
 82         cin >> c;
 83         if(c == 1)
 84             cout << QueueLength(q) << endl;
 85         else if(c == 2)
 86         {
 87             cout << "yuan:";
 88             printqueue(q);
 89             DeQueue(q);
 90             cout << "DE hou:";
 91             printqueue(q);
 92             cout << "Len=: " << QueueLength(q) << endl;
 93         }
 94         else if(c == 3)
 95         {
 96             cout << "yuan:";
 97             printqueue(q);
 98             cout << "input num:";
 99             cin >> d;
100             EnQueue(q, d);
101             cout << "En hou:";
102             printqueue(q);
103             cout << "Len=: " << QueueLength(q) << endl;
104         }
105         else if(c == 0)
106         {
107             return 0;
108         }
109     }
110     return 0;
111 }
原文地址:https://www.cnblogs.com/DSYR/p/9163114.html