队列的简单实现(C语言)

 1 #include <iostream>
 2 #include <stdlib.h>
 3 #define MAX_SIZE 4
 4 using namespace std;
 5 typedef int ElemType;
 6 typedef struct sequeue{
 7     ElemType data[MAX_SIZE];
 8     /*首尾指针*/
 9     size_t front, rear;
10     /*队列实际大小*/
11     size_t queue_size;
12 } Sequeue;
13 void InitQueue(Sequeue * sequeue){
14     /*一开始队头队尾都指向队列第一个位置*/
15     sequeue->front = 0;
16     sequeue->rear = 0;
17     sequeue->queue_size = 0;
18 }
19 /*队列空,返回True*/
20 bool QueueEmpty(Sequeue* q){
21     /*也可以用队列的大小来判断*/
22     //return (q->queue_size == 0);
23     return (q->rear == q->front);
24 }
25 /*队列满,返回True*/
26 bool QueueFull(Sequeue* q){
27     /*队尾指针指向队尾的后一个位置,逻辑上是一个环,要取余。
28     也以可用队列的实际大小来判断,由于队尾指向后一个位置所以会损失一个存储空间,故:MAX_SIZE-1*/
29     //return (q->queue_size == MAX_SIZE-1);
30     return ((q->rear + 1) % MAX_SIZE == q->front);
31      /*下面这样写写是不对的。这是判断队列空的条件*/
32      /*return q->rear==q->front*/
33 }
34 bool EnQueue(Sequeue * q, ElemType data){
35     if(QueueFull(q)) return 0;
36     q->data[q->rear] = data;
37     /*循环队列,尾指针后移*/
38     size_t rptr = (q->rear + 1) % MAX_SIZE;
39     q->rear = rptr;
40     q->queue_size++;
41     return 1;
42 }
43 bool DeQueue(Sequeue * q, ElemType * data){
44     if(QueueEmpty(q)) return 0;
45     *data = q->data[q->front];
46     /*循环队列,头指针后移*/
47     q->front = (q->front + 1) % MAX_SIZE;
48     q->queue_size--;
49     return 1;
50 }
51 int main()
52 {
53     /*测试代码*/
54     Sequeue q;
55     InitQueue(&q);
56     EnQueue(&q, 20);
57     EnQueue(&q, 21);
58     EnQueue(&q, 22);
59     cout<<QueueFull(&q)<<endl;
60     int a;
61     DeQueue(&q, &a);
62     cout << a << endl;
63     DeQueue(&q, &a);
64     cout << a << endl;
65     DeQueue(&q, &a);
66     cout << a << endl;
67     cout<<QueueEmpty(&q)<<endl;
68     return 0;
69 }

 

posted @ 2020-05-01 11:57  wkfxm  阅读(472)  评论(0编辑  收藏  举报