//浙大数据结构 队列的实现(数组)
#include<stdio.h>
#include<stdlib.h>
#include<crtdbg.h>
#define ERROR -1
#define MAXSIZE 4
typedef int ElementType;
typedef int Position;
struct QNode {
ElementType *Data; /* 存储元素的数组 */
Position Front, Rear; /* 队列的头、尾指针 */
int MaxSize; /* 队列最大容量 */
};
typedef struct QNode *Queue;
Queue CreateQueue(int MaxSize)
{
Queue Q = (Queue)malloc(sizeof(struct QNode));
Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
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, ElementType X)
{
if (IsFull(Q)) {
printf("队列满\n");
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);
}
ElementType DeleteQ(Queue Q)
{
if (IsEmpty(Q)) {
printf("队列空\n");
return ERROR;
}
else {
Q->Front = (Q->Front + 1) % Q->MaxSize;
return Q->Data[Q->Front];
}
}
int main()
{
Queue Q = CreateQueue(MAXSIZE);
AddQ(Q, 1);
AddQ(Q, 2);
AddQ(Q, 3);
//实际只能放MAXSIZE-1个元素,
//位置0不放数据,用以区分满(Q->Rear + 1) % Q->MaxSize == Q->Front和
//空Q->Front == Q->Rear
AddQ(Q, 4); //队列满
printf("%d \n", DeleteQ(Q));
printf("%d \n", DeleteQ(Q));
printf("%d \n", DeleteQ(Q));
printf("%d \n", DeleteQ(Q)); //队列空
free(Q->Data);
free(Q);
_CrtDumpMemoryLeaks(); //检查内存泄漏
system("pause");
return 0;
}
浙大数据结构 队列的实现(数组)
最新推荐文章于 2021-12-16 17:18:06 发布