前言
队列(Queue)和堆栈都是有序列表,也属于抽象型数据类型(ADT),所有加入与删除的动作都发生在不同的两端,并且符合First In First Out(先进先出)的特性。队列的概念就好比乘火车时买票的队伍,先到的人当然可以优先买票,买完后就从前端离去准备乘火车,而队伍的后端又陆续有新的乘客加入。
5.1 认识队列
我们同样可以使用数组或列表来建立一个队列。不过堆栈只需要一个top,指针指向堆栈顶,而队列则必须使用front和rear两个指针分别指向前端和尾端,如图所示:
5.1.1 队列的工作运算
5.1.2队列的数组实现
5.1.3以链表实现队列
5.2 队列的应用
队列在计算机领域的应用也相当广泛。
5.2.1环形队列
5.2.2优先队列
5.2.3双向队列
小结
- 队列(Queue)和堆栈都是有序表,也属于抽象数据类型(ADT),它所有加入与删除的动作都发生在不同的两端,并且符合First In First Out(先进先出)的特性。
- 队列的基本运算:CREATE、ADD、Delete、Front、Empty。
- 队列除了能以数组的方式来实现外,我们也可以用链表来实现队列。
- 队列的应用:图遍历的先广后深搜说法(BFS)、计算机的模拟(simulation)、CPU的工作调度、外设脱机批处理系统。
- 环形队列就是一种环形的队列,它是Q(0:n-1)的一维数组。同时Q(0)为Q(n-1)的下一个元素。
- 优先队列(priority queue)为一种不必遵守队列特性——FIFO(先进先出)的有序表,其中的每一个元素都赋予一个优先权(Priority),加入元素时可任意加入,但有最高级优先权(Highest Priority Out First,HPOP)则最先输出。
- 双向队列(Deques)是英文名称(Double-ends Queues)的缩写,双向队列(Deque)就是一种前后两端都可以输入或取出数据的有序表。