循环队列(数组实现) 1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define false 0
5 #define true 1
6
7 typedef int ElementType;
8 typedef int Position;
9 typedef int bool;
10 typedef struct QNode *PtrToQNode;
11 struct QNode
12 {
13 ElementType *Data;
14 Position Front,Rear;
15 int MaxSize;
16 };
17 typedef PtrToQNode Queue;
18
19 Queue CreateQueue(int MaxSize); //创建一个最大长度为MaxSize的空队列
20 bool IsFull(Queue Q); //判断队列是否已满
21 bool IsEmpty(Queue Q); //判断队列是否为空
22 bool AddQ(Queue Q, ElementType X); //入队
23 ElementType DeleteQ(Queue Q); //出队
24
25
26
27 Queue CreateQueue(int MaxSize)
28 {
29 Queue Q = (Queue)malloc(sizeof(struct QNode));
30 Q->Data = (ElementType *)malloc(MaxSize*sizeof(ElementType));
31 Q->Front = Q->Rear = 0;
32 Q->MaxSize = MaxSize;
33 return Q;
34 }
35
36 bool IsFull(Queue Q)
37 {
38 return ((Q->Rear+1) % (Q->MaxSize)) == Q->Front;
39 }
40
41 bool IsEmpty(Queue Q)
42 {
43 return Q->Front == Q->Rear;
44 }
45
46 bool AddQ(Queue Q, ElementType X)
47 {
48 if(IsFull(Q))
49 {
50 printf("队列已满,无法入队!\n");
51 return false;
52 }
53 Q->Rear = (Q->Rear+1)%(Q->MaxSize);
54 Q->Data[Q->Rear] = X;
55 return true;
56 }
57
58 ElementType DeleteQ(Queue Q)
59 {
60 if(IsEmpty(Q))
61 {
62 printf("队列为空,无法出队!\n");
63 return false;
64 }
65 Q->Front = (Q->Front+1)%(Q->MaxSize);
66 return Q->Data[Q->Front];
67 }