持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天
队列
定义特点
定义
只允许在表的一端进行插入,另一端进行删除的线性表
队尾rear插入 对头font删除
特点
先进先出 FIFO
表示
抽象数据类型
此处缺乏代码
队列有两种存储表示,顺序表和链式表示
循环队列
解决假溢出问题
区别队空队满
顺序
定义
用一组地址连续的存储单元依次存放从队列头到队列尾的元素,附设两个整型变量font和rearj分别指示队头队尾元素的位置
顺序存储结构
基本操作
初始化
动态分配一个预定义大小为MAXQSIZE的数组空间
为队列分配一个最大容量为MAXQQSIZE的存储空间,base指向数组空间的首地址
头指针和尾指针为零,表示队列为空
求队列长度
长度:非循环队列——尾指针和头指针的差值
循环队列——取模 差值+MAXQSIZE 再与MASQSIZE求余
返回第Q个元素个数即可
循环队列的入队
在队尾插入一个新的元素
- 判断队列是否满,若满则返回ERROR
- 将新元素插入队列
- 队尾指针+1
循环队列的出队
将队头元素删除
- 判断队列是否为空,若空则返回EROOR
- 保存队头元素
- 队头指针+1
取队头元素
队列非空时,返回当前队列头元素的值,队头指针保持不变
链式
采用链式存储结构实现的队列,常用单链表表示队列
基本操作
链队的初始化
构造一个结点作为头节点,队头和队尾指针指向此结点
- 头结点的指针域清空
链队的入队
- 给新元素分配结点空间,用指针p指向
- 新结点数据域置为e
- 将新结点插入到队列
- 修改队尾指针为p
链队的出队
- 判断队列是否为空,空则返回ERROR
- 临时保存队头元素的空间,以备释放
- 修改头结点的指针域,指向下一结点
- 判断出队元素是否为最后一个元素,若是则将队尾指针重新赋值,指向头结点
- 释放原队头元素的空间
取对头元素
队列非空时,返回当前队列头元素的值,队头指针保持不变