目录
队列的定义
- 队列(queue)是一种先进先出(Frist In Frist Out ---FIFO)的线性表。在表一端插入(表尾),在另一端(表头)删除。
- 队列的逻辑结构与同线性表相同,仍为一对一关系。
- 只能在队首和队尾运算,且访问结点时依照先进先出(FIFO) 的原则。
队列和我们日常生活中排队购物是一个道理的,如下所示:
队列的相关概念
队头和队尾:
队头:表头即端,称为队头。
队尾:表尾即端,称为队尾;
入队和出队:
入队:插入元素称为入队;
出队:删除元素称为出队。
队列的表示与实现
由于队列本身就是线性表,于是队列也有顺序存储和链式存储两种实现方式。
有关顺序队和链队的详请,通过上方链接即可查看。关键是掌握入队和出队操作,具体实现依顺序队或链队的不同而不同,通常以循环顺序队列更常见。
队列的应用
舞伴问题:
假设在舞会上,男士和女士各自排成一队。舞会开始时,依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。显然, 先入队的男士或女士先出队配成舞伴。因此该问题具有典型的先进先出特性,可以用队列作为算法的数据结构。
解法:
- 首先构造两个队列
- 依次将队头元素出队配成舞伴
- 某队为空,则另外一队等待着则是下一舞曲第一个可获得舞伴的人。
其他问题(例如迷宫求解):
队列的应用非常广泛,比如用在图的广度优先遍历中。作为一种最简单的数据结构,限制性的线性表,当然用线性表也可以实现队列的所有功能,但正是由于栈和队列太常用,才单独抽象成一种数据结构。