队列是一种先进先出的线性表【FIFO】
队列的抽象数据类型
【与线性表类似,但,插入数据只能在队尾进行,删除数据只能在对头进行】
顺序存储结构
假设n个元素,则顺序存储队列需要建立一个大于n的数组,并把队列的所有元素存储在数组的前n个单元,数组下标为0的一端即是队头
入队列操作,即在队尾加一个元素,不需要移动任何元素,因此时间复杂度为O(1)
但,出列,所有元素都要向前移动:
如果不限制队列的元素必须存储在数组的前n个单元:
为了避免只有一个元素时,队头和队尾重合处理麻烦,引入两个指针:
循环队列
解决假溢出 ——> 后面满了,就从头开始【也就是 头尾相接的循环】
把这种首尾相接的顺序存储结构称为 循环队列
链式存储结构
链队列,就是线性表的单链表,只能 尾进头出
为了操作上的方便,将队头指针指向链队列的头结点,将队尾指针指向终端结点
链队列的结构
入队【在链表尾部插入结点】
出队
循环队列与链队列比较