数据结构队列实例

  1 //数据结构 --队列
  2 //静态队列-用数组实现
  3 //静态队列通常是循环队列
  4 //循环队列讲解
  5 //1.静态队列为什么必须是循环队列?
  6 //2.循环队列需要几个参数来确定?
  7 /*
  8     front 和 rear
  9     1)队列初始化,font和rear的值都为零
 10     2)队列非空   
 11         font代表的是队列的第一个元素
 12         rear代表的是队列的最后一个有效元素的下一个元素
 13     3)队列空
 14         front和rear值
 15 */
 16 //3.循环队列各个参数的含义?
 17 //4.如何判断循环队列是否为空?
 18 /*
 19     front与rear值相等,则该队列就一定为空;
 20 */
 21 //5.如何判断循环队列是否已满?
 22 /*
 23 1)利用标志参数来判定是否已满;
 24 2)少用一个元素
 25 if((r+1)%数组长度==f)
 26     已满;
 27 else
 28     不满;
 29 */
 30 //6.循环队列入队伪算法讲解
 31 #include <stdio.h>
 32 
 33 typedef struct Queue
 34 {
 35     int *pBase;
 36     int front;
 37     int rear;
 38 }QUEUE;
 39 
 40 void init(QUEUE*);
 41 bool en_queue(QUEUE*, int val);
 42 void traverse_queue(QUEUE);
 43 bool out_queue(QUEUE*, int *);
 44 bool empty_queue(QUEUE* pQ);
 45 
 46 int main(void)
 47 {
 48     QUEUE Q;
 49     en_queue(&Q, 1);
 50     en_queue(&Q, 1);
 51     en_queue(&Q, 1);
 52     init(&Q);
 53     return 0;
 54 }
 55 
 56 void init(QUEUE *pQ)
 57 {
 58     pQ->pBase = (int*)malloc(sizeof(int)*6);
 59     pQ->front = 0;
 60     pQ->rear = 0;
 61 }
 62 
 63 bool en_queue(QUEUE* pQ, int val)
 64 {
 65     if (full_queue(pQ))
 66     {
 67         return false;
 68     }
 69     else
 70     {
 71         pQ->pBase[pQ->rear] = val;
 72         pQ->rear = (pQ->rear + 1)%6;
 73         return true;
 74     }
 75 }
 76 
 77 bool full_queue(QUEUE *pQ)
 78 {
 79     if (pQ->front == (pQ->rear + 1) % 6)
 80     {
 81         return true;
 82     }
 83     else
 84     {
 85         return false;
 86     }
 87 }
 88 
 89 void traverse_queue(QUEUE *pQ)
 90 {
 91     int i = pQ->front;
 92     while (i != pQ->rear)
 93     {
 94         printf("%d",pQ->pBase[i]);
 95         i = (i + 1) % 6;
 96     }
 97     return;
 98 }
 99 
100 bool empty_queue(QUEUE *pQ)
101 {
102     if (pQ->rear == pQ->front)
103     {
104         return true;
105     }
106     else
107     {
108         return false;
109     }
110 }
111 
112 bool out_queue(QUEUE*pQ, int* pVal)
113 {
114     if (empty_queue(pQ))
115     {
116         return false;
117     }
118 
119     int i = 0;
120     while (i != pQ->rear)
121     {
122         *pVal = pQ->pBase[pQ->front];
123         pQ->front = (pQ->front + 1) % 6;
124     }
125     return true;
126 }
127 
128 //队列的具体应用:所有和时间有关的都与队列有关
怕什么真理无穷,进一寸有一寸的欢喜。---胡适
原文地址:https://www.cnblogs.com/hujianglang/p/9813853.html