1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef char DataType;
5
6 #define QueueSize 40
7
8 /*
9
10 该种循环队列实现的原理是通过size实现判断队列是否已满
11
12 */
13
14 //构造循环队列
15 typedef struct
16 {
17 DataType data[QueueSize];
18 int front, rear, size;//用size记录队列的长度
19 }ScQueue;
20
21 //初始化循环队列
22 void InitScQueue(ScQueue &Q)
23 {
24 Q.front = Q.rear = 0;
25 Q.size = 0;//初始化时队列的长度为0
26 }
27
28 //判断循环队列是否为空---同时要判断flag是否为0
29 bool ScQueueEmpty(ScQueue Q)
30 {
31 if (Q.front == Q.rear && Q.size == 0)
32 {
33 return true;
34 }
35 else
36 {
37 return false;
38 }
39 }
40
41 //入队操作--插入队列
42 bool EnterScqueue(ScQueue &Q, DataType x)
43 {
44 //判断队列是否已满
45 if (Q.front == Q.rear && Q.size == QueueSize)
46 {
47 return false;
48 }
49 else
50 {
51 Q.data[Q.rear] = x;
52 Q.rear += 1;
53 //插入队列了要把长度加1
54 Q.size += 1;
55 return true;
56 }
57 }
58
59 //出队操作--删除队列元素
60 bool DeleteScqueue(ScQueue &Q, DataType &x)
61 {
62 //判断队列是否为空
63 if (Q.front == Q.rear && Q.size == 0)
64 {
65 return false;
66 }
67 else
68 {
69 x = Q.data[Q.front];
70 Q.front += 1;
71 //删除时长度减1
72 Q.size -= 1;
73 return true;
74 }
75 }
76
77 //读取队头元素
78 bool GetScqueueHead(ScQueue Q, DataType &x)
79 {
80 //判断队列是否为空
81 if (Q.front == Q.rear && Q.size == 0)
82 {
83 return false;
84 }
85 else
86 {
87 x = Q.data[Q.front];
88 return true;
89 }
90 }
91
92 //清空队列---只要将三者全部置为0即可清空队列
93 void ClearScqueue(ScQueue &Q)
94 {
95 Q.front = 0;
96 Q.rear = 0;
97 Q.size = 0;
98 }
99
100
101 int main()
102 {
103 char str[] = "ABCDEFGH";
104 char x;
105
106 ScQueue Q;
107 InitScQueue(Q);
108
109
110 for (int i = 0; i < sizeof(str) - 1; i++)
111 {
112 //将字符串中的数据插入队列
113 EnterScqueue(Q, str[i]);
114 }
115
116 DeleteScqueue(Q, x);
117 printf("出队列的元素为:%c\n", x);
118
119 printf("顺序队列中的元素为:");
120 //判断是否队列不为空
121 if (ScQueueEmpty(Q) == false)
122 {
123 //这里循环时要注意用队列的头和尾进行循环
124 for (int i = Q.front; i < Q.rear; i++)
125 {
126 printf("%c", Q.data[i]);
127 }
128 }
129
130
131
132
133 getchar();
134 return 0;
135 }