队列的循环队列

先附上C++下的代码

 1 #include <iostream>
 2 #include<malloc.h>
 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<n;i++){
20         cin>>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<<Q.base[p]<<endl;
46         p=(p+1)%MAXSIZE;
47     }
48     return 0;
49 }
Here!Look,Look

  循环队列中最难也是最妙的操作就是,将实际线性的顺序存储空间以代码实现令人产生幻觉(其实就是人类自己想像)的循环队列的效果......

  

  通过一个求余队列长度(%MAXSIZE),达到了每次超过队列长度就循环至队头开始赋值,直至队列已满,同时舍弃一个空间来判断队列是否为满。

本文rear是指向尾号元素的下一位,当(Q.rear+1)%MAXSIZE=Q.front时,队满。
原文地址:https://www.cnblogs.com/wssblogs/p/7692356.html