#include#include #include //队列的顺序存储实现 typedef int Position; struct QNode { int *Data; Position Front,Rear;//定义队列的头部以及尾部 int MaxSize;//数组的大小 }; typedef struct QNode *Queue; Queue CreateQueue(int MaxSize) { Queue Q = (Queue)malloc(sizeof(struct QNode));//为该队列分配一块内存空间 Q->Data = (int *)malloc(MaxSize * sizeof(int));//为数组分配一块内存空间 Q->Front = Q->Rear = 0; Q->MaxSize = MaxSize; return Q; } bool IsFull(Queue Q) { return ((Q->Rear + 1) % Q->MaxSize == Q->Front); } bool AddQ(Queue Q, int x) { if (IsFull(Q)) { printf("队列满"); return false; } else { Q->Rear = (Q->Rear + 1) % Q->MaxSize; Q->Data[Q->Rear] = x; return true; } } bool IsEmpty(Queue Q) { return (Q->Front == Q->Rear); } int DeleteQ(Queue Q) { if (IsEmpty(Q)) { printf("队列空"); // return ERROR; } else { Q->Front = (Q->Front+1) % Q->MaxSize; return Q->Data[Q->Front]; } } //定义一个显示队列的方法 void showQueue(Queue Q){ //判断是否为空 if(IsEmpty(Q)) { printf("队列为空,不能显示数据"); return; } //遍历数组,显示数据 for (int i = Q->Front + 1; i <= Q->Front + ((Q->Rear+Q->MaxSize-Q->Front) % Q->MaxSize); i++) { printf("Q->Data[%d] = %dn",i%Q->MaxSize,Q->Data[i%Q->MaxSize]);//取模运算的奇妙之处 } } int main(void) { Queue Q = CreateQueue(5); printf("直接显示数据Test:因为预留了一个位置,队列只能增加4个元素(队里数组大小为5):n"); AddQ(Q,1); AddQ(Q,2); AddQ(Q,3); AddQ(Q,4); showQueue(Q); printf("队列满Test:n"); AddQ(Q,5); printf("n元素出队列Test:n"); printf("出队列值:%dn",DeleteQ(Q)); printf("出队列值:%dn",DeleteQ(Q)); printf("出队列值:%dn",DeleteQ(Q)); printf("出队列值:%dn",DeleteQ(Q)); printf("n空队列显示Test:n"); DeleteQ(Q); return 0; }
输出:
直接显示数据Test:因为预留了一个位置,队列只能增加4个元素(队里数组大小为5): Q->Data[1] = 1 Q->Data[2] = 2 Q->Data[3] = 3 Q->Data[4] = 4 队列满Test: 队列满 元素出队列Test: 出队列值:1 出队列值:2 出队列值:3 出队列值:4 空队列显示Test: 队列空 -------------------------------- Process exited after 0.06129 seconds with return value 0 请按任意键继续. . .



