队列
1. 什么是队列
队列(Queue):具有一定操作约束的线性表
- 插入和删除操作:只能在一端(front)插入,而在另一端(rear)删除
- 数据插入:入队列(AddQ)
- 数据删除:出队列(DeleteQ)
- 先进先出:FIFO
2. 队列的抽象数据类型描述
-
类型名称:队列(Queue)
-
数据对象集:一个有 0 个或多个元素的有穷线性表
-
操作集:长度为 MaxSize 的队列 Q∈Queue,队列元素 item∈ElementType
队列的基本操作主要有:
Queue CreateQueue(int MaxSize)
:生成长度为 MaxSize 的空队列int IsFull(Queue Q)
:判断队列 Q 是已满void AddQ(Queue Q,ElementType item)
:将数据元素 item 插入队列 Q 中int IsEmpty(Queue Q)
:判断队列 Q 是否为空ElementType DeleteQ(Queue Q)
:将队头数据元素从队列中删除并返回
1. 循环队列的顺序存储实现
队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量 front 以及一个记录队列尾元素位置的变量 rear 组成,其中 front 指向整个队列的头一个元素的再前一个,rear 指向的是整个队列的最后一个元素,从 rear 入队,从 front 出队,且仅使用 n-1 个数组空间
#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef int ElementType;
typedef struct QNode *Queue;
struct QNode{
ElementType Data[MaxSize];
int front; // 记录队头
int rear; // 记录队尾
};
Queue CreateQueue(); // 初始化队列
void AddQ(Queue Q,ElementType item); // 入队
int IsFull(Queue Q); // 判断队列是否已满
ElementType DeleteQ(Queue Q); // 出队
int IsEmpty(Queue Q); // 判断队列是否为空
// 初始化
Queue CreateQueue(){
Queue Q;
Q = (Queue)malloc(sizeof(struct QNode));
Q->front = -1;
Q->rear = -1;
return Q;
}
// 判断队列是否已满
int IsFull