-
定义
队列是ListInsert发生表尾、ListDelete发生在表头的线性表,主要操作:入队、出队。 -
术语
表头-队头,表尾-队尾,插入-入队,删除-出队 -
特点
- 先入先出(FIFO)
- 插入的位置是length+1,删除的位置的是1,一般读取第1个数据元素
循环队列(Circular Queue)
顺序队列的假溢出问题
队列上溢出
- 真上溢:队列真正满时再入队。
- 假上溢:rear已指向队尾,但队列前端仍有空位置。
- 解决假上溢的方法
方法一:每次删除队头一个元素后,把整个队列往前移一个位置(造成时间浪费)。
方法二:使用循环队列方法二:使用循环队列
循环队列-基本思想
- 首位相连:把a[0]和a[5]想象成邻居
循环队列-满与空的判定
循环队列空和满,队头和队尾相连,如何区分?
解决方法
- 另外设置一个标志,以区别队空、队满;
- 少用一个元素空间
队空:front = = rear
队满:(rear+1)%M = = front
优先队列(Priority Queue)
优先队列是正常入,按照优先级出的队列。
实现机制
- Heap(Binary,Binomial,Fibonacci)
- Binary Search Tree
小顶堆(Mini Heap)
大顶堆(Max Heap)
各种堆实现的时间复杂度对比图