队列的简单实现(C语言)
标签:开始 col span define include deque space ++ turn
1 #include 2 #include 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 coutendl;
60 int a;
61 DeQueue(&q, &a);
62 cout endl;
63 DeQueue(&q, &a);
64 cout endl;
65 DeQueue(&q, &a);
66 cout endl;
67 coutendl;
68 return 0;
69 }
队列的简单实现(C语言)
标签:开始 col span define include deque space ++ turn
原文地址:https://www.cnblogs.com/strive408/p/12813057.html
评论