线性表之队列
什么是队列
大众化
- 最常见的队列就是排队
- 假设超市送鸡蛋
- 大伙去排队领鸡蛋
- 先来的先领,后来的后领
- 这就是队列
- 先来先服务,先进先出
专业性
- 只能在一端插入,而在另一端删除
- 的
- 具有一定操作约束的线性表
队列的操作集
- 生成长度为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;
}
其他操作
大部分操作都跟堆栈是相似的,就是思路不一样而已
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现