线性表之队列

什么是队列

大众化

  • 最常见的队列就是排队
  • 假设超市送鸡蛋
  • 大伙去排队领鸡蛋
  • 先来的先领,后来的后领
  • 这就是队列
  • 先来先服务,先进先出

专业性

  • 只能在一端插入,而在另一端删除
  • 具有一定操作约束的线性表

队列的操作集

  • 生成长度为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;
}

其他操作

大部分操作都跟堆栈是相似的,就是思路不一样而已

posted @   淦丘比  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示