网站首页 > 技术文章 正文
1.队列的链式存储结构
用链式存储结构存储的队列称为链队列,它是一个仅在表头删除结点和在表尾插入结点的单链表。因此,在链队列中需要使用两个指针:头指针front和尾指针rear。用front指向链队列的队头,用rear指向链队列的队尾。如图3-8所示。
为操作方便,在链队列中添加一个头结点,该结点不存储任何元素,并让头指针指向头结点。可见空的链队列的判定条件是头指针和尾指针均指向头结点。
链队列的类型LinkQueue可定义如下:
struct node { /*链队列的结点类型*/ ElemType data ; /*链队列结点的数据域*/ struct node *next; /*链队列结点的指针域*/ }; struct node *front,*rear; /*front和rear分别为链队列的头指针和尾指针*/
2.链队列的基本操作
假设在链队列中,front、rear均为node类型的全局变量。
(1)链队列的初始化
算法步骤:
1.首先产生一个头结点,将其后继指针设置为空;
2.将队头和队尾指针均指向该结点。
链队列的初始化算法
void InitQueue() /*初始化链队列*/ { struct node *p=malloc(sizeof(struct node));/*生成新结点p*/ p->next=NULL; /*使新结点的指针域为空*/ front=rear=p; /*队头和队尾指针均指向新结点*/ }
(2)判队空
判断队列是否为空,也就是判断队头、队尾指针是否相等。
链队列判队空算法
int QueueEmpty() { if(front==rear) return 1; /* 如果链队列为空,则返回1 */ else return 0; /* 否则返回0 */ }
(3)入队
算法要点:
1.生成一个新结点p,给新结点的数据域和指针域分别赋值;
2.使新结点成为新的队尾结点;
3.修改队尾指针rear,使rear指向新的队尾结点。
链队列入队算法
void InQueue(ElemType x) { struct node *p; p=malloc(sizeof(struct node)); /*生成新结点p*/ p->data=x; /*给新结点的数据域赋值*/ p->next=NULL; /*给新结点的指针域赋值*/ rear->next=p; /*新结点成为新的队尾结点*/ rear=p; /*让队尾指针指向新的队尾结点*/ }
(4)出队
算法要点:
1.首先检查链队列是否为空,若为空队列,则进行“下溢出”错误处理;
2.保存队头结点的值;
3.修改队头指针,使其指向队列的第二个结点,建立新的链接队列;
4.删除原队头结点;
5.返回原队头结点的信息。
链队列出队算法
ElemType OutQueue() { int x; if(front==rear){ /*检查链队列是否为空*/ printf("队列下溢错误!\n"); exit(1); /*若队空不能出队,则退出运行*/ } else { struct node *p=front->next; /*用指针变量p指向队列的第一个结点*/ x=p ->data; /*用x暂存第一个结点数据域*/ front->next=p->next; /*修改队头指针,指向下一个结点*/ if(p->next==NULL) rear=front; /*若队列已空则修改队尾指针*/ free(p); /*回收原队头结点*/ return x; /*返回原队头元素的值*/ } }
猜你喜欢
- 2024-10-04 nodejs配置和环境的搭建(nodejs 配置)
- 2024-10-04 广州蓝景分享—Webpack 基础教学,正在自学前端的你赶快收藏起来
- 2024-10-04 五分钟了解 Node.js Shebang(五分钟了解中国历史)
- 2024-10-04 怎么解决koa写server发布的噩梦(koa server)
- 2024-10-04 Node直出方案的实现及性能测试(node技术)
- 2024-10-04 webpack5入门到实战(5-处理 js 资源)
- 2024-10-04 Node-red Function&注入功能介绍
- 2024-10-04 Linux实战017:Ubuntu搭建NodeJS开发环境
- 2024-10-04 手把手告诉你如何安装多个版本的node
- 2024-10-04 Node编程基本语法(nodejs基础语法)
- 10-02基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- 10-02Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- 10-02AWD-LSTM语言模型是如何实现的_lstm语言模型
- 10-02NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 10-02使用ONNX和Torchscript加快推理速度的测试
- 10-02tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- 10-02Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- 10-02Gateway_gateways
- 最近发表
-
- 基于深度学习的铸件缺陷检测_如何控制和检测铸件缺陷?有缺陷铸件如何处置?
- Linux Mint 22.1 Cinnamon Edition 搭建深度学习环境
- AWD-LSTM语言模型是如何实现的_lstm语言模型
- NVIDIA Jetson Nano 2GB 系列文章(53):TAO模型训练工具简介
- 使用ONNX和Torchscript加快推理速度的测试
- tensorflow GPU环境安装踩坑日记_tensorflow配置gpu环境
- Keye-VL-1.5-8B 快手 Keye-VL— 腾讯云两卡 32GB GPU保姆级部署指南
- Gateway_gateways
- Coze开源本地部署教程_开源canopen
- 扣子开源本地部署教程 丨Coze智能体小白喂饭级指南
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)