1.初始化队列
2.获取队列长度
3.入队
4.出队
5.获取循环队列头元素
6.判断是否为空队列
7.遍历循环队列
8.销毁队列
代码
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define MAXQSIZE 100 4 typedef struct{ 5 int *base; 6 int front; 7 int rear; 8 }SqQueue; 9 10 bool InitQueue(SqQueue &Q) 11 { 12 Q.base = (int *)malloc(MAXQSIZE*sizeof(int)); 13 if(!Q.base) exit(-1); 14 Q.front = Q.rear = 0; 15 return 1; 16 } 17 18 int QueueLength(SqQueue &Q) 19 { 20 return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; 21 } 22 23 bool EnQueue(SqQueue &Q,int e) 24 { 25 if((Q.rear + 1) % MAXQSIZE == Q.front) return 0;//表示队列已经满了 26 Q.base[Q.rear] = e;//有很多人这里就一脸懵逼,什么东西,下面解释一下 27 //Q.base 指向动态分配的数组中的元素。 28 //a[n] 在C语言中相当于 (a+n),即使 a 是数组, 29 //也会被转换成指向第一个元素的指针。(T*)a+n, 30 //得到的是数组里的第 n 个元素的指针。 31 //数组的元素访问就是按这样的方式实现的。 32 Q.rear = (Q.rear + 1) % MAXQSIZE; 33 return 1; 34 } 35 36 bool DeQueue(SqQueue &Q,int &e) 37 { 38 if(Q.front == Q.rear) return 0;//队列为空一个元素都没有 39 e = Q.base[Q.front]; 40 Q.front = (Q.front + 1) % MAXQSIZE; 41 return 1; 42 } 43 44 bool GetHead(SqQueue Q,int &e) 45 { 46 if(Q.front == Q.rear) return 0; 47 e = Q.base[Q.front]; 48 return 1; 49 } 50 51 bool Empty(SqQueue *Q) 52 { 53 if(Q->rear == Q->front) 54 return 1; 55 return 0; 56 } 57 58 void TraverQueue(SqQueue &Q) 59 { 60 int cur = Q.front; 61 while(cur != Q.rear) 62 { 63 cout << Q.base[cur] << " "; 64 cur++; 65 } 66 puts(""); 67 } 68 69 void DestroyQueue(SqQueue *Q) //销毁该队列 70 { 71 free(Q->base); 72 Q->front=Q->rear=0; 73 } 74 75 int main() 76 { 77 SqQueue Q; 78 InitQueue(Q); 79 int x; 80 for(int i = 5;i >= 1;i--) 81 { 82 EnQueue(Q,i); 83 } 84 TraverQueue(Q); 85 cout << "Qlength = " << QueueLength(Q) << endl; 86 bool ok = DeQueue(Q,x); 87 if(ok) 88 { 89 cout << "x = " << x << endl; 90 TraverQueue(Q); 91 cout << "After DeQueue Qlength = " << QueueLength(Q) << endl; 92 } 93 94 ok = GetHead(Q,x); 95 if(ok) 96 cout << "Qhead = " << x << endl; 97 DestroyQueue(&Q); 98 cout << Q.front << " " << Q.rear << endl; 99 TraverQueue(Q);//验证是否销毁 100 return 0; 101 }