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 }