数据结构-实现队列

队列实现代码,整个代码一部分是自己写出来的,一部分采取书上的,很简单一看就懂,那个地方没看懂(你就要反思一下自己怎么学的),哈哈哈,也可以评论,有时间我会解答,仅供参考不喜勿喷,欢迎大佬指点,点个赞作为鼓励呀,谢谢

代码如下:

#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;
}

运行截图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/damowangsx/article/details/107931029