先附上C++下的代码
1 #include2 #include 3 #define MAXSIZE 100 4 5 using namespace std; 6 7 typedef struct{ 8 int *base; 9 int front;10 int rear;11 }SqQueue;12 int InitQueue(SqQueue &Q,int n){ //初始化队列13 int i;14 Q.base = (int *)malloc(MAXSIZE * sizeof(int));15 if(!Q.base) exit(-1);16 Q.front=0;17 Q.rear=0;18 if(n==0)return -1;19 for(i=0;i >Q.base[i];21 Q.rear++;22 }23 return 0;24 }25 26 int EnQueue(SqQueue &Q, int e){ //入队27 if((Q.rear+1)%MAXSIZE==Q.front) exit(-1);28 Q.base[Q.rear]=e;29 Q.rear=(Q.rear+1)%MAXSIZE;30 return 0;31 }32 33 int OutQueue(SqQueue &Q,int &e){ //出队34 if(Q.front==Q.rear) exit(-1);35 e=Q.base[Q.front];36 Q.front=(Q.front+1)%MAXSIZE;37 return 0;38 }39 40 int OutputQueue(SqQueue Q){ //输出队列中的元素41 if(Q.front==Q.rear) exit(-1);42 int p;43 p=Q.front;44 while(p!=Q.rear){45 cout< <
循环队列中最难也是最妙的操作就是,将实际线性的顺序存储空间以代码实现令人产生幻觉(其实就是人类自己想像)的循环队列的效果......
通过一个求余队列长度(%MAXSIZE),达到了每次超过队列长度就循环至队头开始赋值,直至队列已满,同时舍弃一个空间来判断队列是否为满。
本文rear是指向尾号元素的下一位,当(Q.rear+1)%MAXSIZE=Q.front时,队满。