线性表之队列
什么是队列
大众化
- 最常见的队列就是排队
- 假设超市送鸡蛋
- 大伙去排队领鸡蛋
- 先来的先领,后来的后领
- 这就是队列
- 先来先服务,先进先出
专业性
- 只能在一端插入,而在另一端删除
- 的
- 具有一定操作约束的线性表
队列的操作集
- 生成长度为MaxSize的空队列
- 判断队列Q是否已满
- 将数据元素item插入队列Q中
- 判断队列Q是否为空
- 删除并返回队头数据元素
队列的链式存储实现
链表结构体初始化
struct Node{
ElementType Data;
struct SNode *Next;
};
struct QNode { //链队列结构
struct Node* rear; //指向队尾结点
struct Node* front; //指向对头结点
//这样就不用每次用的时候都遍历一回了,nice~
};
typedef struct QNode *Queue;
Queue PtrQ;
删除并返回队头数据元素
ElementType DeleteQ(Queue PtrQ)
{
struct Node* FrontCell;
ElementType FrontElem;
//判断队列是否为空
if (PtrQ->front == NULL)
{
printf("队列空");
return NULL;
}
FrontCell = PtrQ->front;
//如果队列只有一个元素
if (PtrQ->front == PtrQ->rear)
{
//删除后队列置为空
PtrQ->front = PtrQ->rear = NULL;
}
else
{
//使得次结点变为头结点
PtrQ->front = PtrQ->front->Next;
}
FrontElem = FrontCell->Data;
free(FrontCell);
//返回头结点元素
return FrontElem;
}
其他操作
大部分操作都跟堆栈是相似的,就是思路不一样而已