数据结构--队列

111 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天

队列

定义特点

定义

只允许在表的一端进行插入,另一端进行删除的线性表

队尾rear插入 对头font删除

特点

先进先出 FIFO

表示

抽象数据类型

此处缺乏代码

队列有两种存储表示,顺序表和链式表示

循环队列

解决假溢出问题

区别队空队满

顺序

定义

用一组地址连续的存储单元依次存放从队列头到队列尾的元素,附设两个整型变量font和rearj分别指示队头队尾元素的位置

顺序存储结构

基本操作

初始化

动态分配一个预定义大小为MAXQSIZE的数组空间

 为队列分配一个最大容量为MAXQQSIZE的存储空间,base指向数组空间的首地址
 ​
 头指针和尾指针为零,表示队列为空
求队列长度

长度:非循环队列——尾指针和头指针的差值

循环队列——取模 差值+MAXQSIZE 再与MASQSIZE求余

返回第Q个元素个数即可

循环队列的入队

在队尾插入一个新的元素

  1. 判断队列是否满,若满则返回ERROR
  2. 将新元素插入队列
  3. 队尾指针+1
循环队列的出队

将队头元素删除

  1. 判断队列是否为空,若空则返回EROOR
  2. 保存队头元素
  3. 队头指针+1
取队头元素

队列非空时,返回当前队列头元素的值,队头指针保持不变

链式

采用链式存储结构实现的队列,常用单链表表示队列

基本操作

链队的初始化

构造一个结点作为头节点,队头和队尾指针指向此结点

  • 头结点的指针域清空
链队的入队
  1. 给新元素分配结点空间,用指针p指向
  2. 新结点数据域置为e
  3. 将新结点插入到队列
  4. 修改队尾指针为p
链队的出队
  1. 判断队列是否为空,空则返回ERROR
  2. 临时保存队头元素的空间,以备释放
  3. 修改头结点的指针域,指向下一结点
  4. 判断出队元素是否为最后一个元素,若是则将队尾指针重新赋值,指向头结点
  5. 释放原队头元素的空间
取对头元素

队列非空时,返回当前队列头元素的值,队头指针保持不变