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\n";
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 }