队列实现代码,整个代码一部分是自己写出来的,一部分采取书上的,很简单一看就懂,那个地方没看懂(你就要反思一下自己怎么学的),哈哈哈,也可以评论,有时间我会解答,仅供参考不喜勿喷,欢迎大佬指点,点个赞作为鼓励呀,谢谢
代码如下:
#include<stdio.h>
#include<stdlib.h>
//检测队列是否为空
typedef struct QueueRecord* Queue;
typedef int ElementType;
struct QueueRecord
{
int Capacity;//队列大小
int Front;//对头
int Rear;//队尾
int Size;//队列存储了多少数据
ElementType* Array;
};
//测试队列是否满
int IsFull(Queue Q)
{
return Q->Size == Q->Capacity;
}
//测试队列是否为空的
int IsEmpty(Queue Q)
{
return Q->Size == 0;
}
//初始化一个空队列
void MakeEmpty(Queue Q)
{
Q->Size = 0;
Q->Front = 0;
Q->Rear = 0;
}
//建造队列
Queue CreateQueue(ElementType X)
{
Queue Q;
Q = malloc(sizeof(struct QueueRecord));
Q->Capacity = X;
Q->Array = malloc(sizeof(int) * X);
MakeEmpty(Q);
printf("空间大小为%d的队列创建成功\n",X);
return Q;
}
//循环队列的关键步骤
static int Succ(int Value, Queue Q)
{
if (++Value == Q->Capacity)
Value = 0;
return Value;
}
//入队
void Enqueue(ElementType X, Queue Q)
{
if (IsFull(Q))
{
printf("队列已满,无法入队\n");
return;
}
else
{
Q->Size++;
Q->Rear = Succ(Q->Rear, Q);
Q->Array[Q->Rear] = X;
printf("数据%d入队成功\n", X);
}
}
//出队
void Dequeue(Queue Q)
{
if (IsEmpty(Q))
{
printf("队列为空,无法出队\n");
return;
}
else
{
Q->Size--;
Q->Front = Succ(Q->Front, Q);
printf("数据%d出队成功\n", Q->Array[Q->Front]);
}
}
int main()
{
Queue Q=NULL;
Q=CreateQueue(5);
Enqueue(1, Q);
Enqueue(2, Q);
Enqueue(3, Q);
Enqueue(4, Q);
Dequeue(Q);
Dequeue(Q);
Enqueue(5, Q);
Enqueue(6, Q);
Enqueue(7, Q);
Dequeue(Q);
Dequeue(Q);
Dequeue(Q);
Dequeue(Q);
system("pause");
return 0;
}
运行截图: