第4章栈和队列:队列基础知识
4.5 队列
前面介绍的栈是一种操作受限的线性表,本节开始介绍的队列(Queue)是另外一种操作受限的线性表,其限制为仅允许在表的一端进行插入操作,而在表的另一端进行删除操作(如图 4.5.1 所示)。
- 允许进行插入操作的一端称为队尾(Rear);
- 允许进行删除操作的一端称为队头或队首(Front)。
向队列中插入新元素称为入队或进队(Enqueue),新元素进队后就成为新的队尾元素。
从队列中删除元素称为出队或离队(Dequeue),元素出队后,其直接后继元素就成为队首元素。
由于队列的插入和删除操作分别是在各自的一端进行的,每个元素必然按照进入的次序出队,所以队列的特点是:先进先出表(First In First Out,FIFO)。
队列可以想象为日常生活中排队等待服务的场景(例如排队购票),先来的人先得到服务并离开队伍,后来的人只能排在队尾。
队列和栈都是操作受限的线性表(这是它们相同的地方),但它们的逻辑特性有所不同:
特性 | 队列(Queue) | 栈(Stack) |
---|---|---|
操作原则 | 先进先出(FIFO) | 后进先出(LIFO) |
插入操作 | 在队尾(Rear)进行,称为入队(Enqueue) | 在栈顶(Top)进行,称为入栈(Push) |
删除操作 | 在队头(Front)进行,称为出队(Dequeue) | 在栈顶(Top)进行,称为出栈(Pop) |
读取操作 | 读取队头元素(Front) | 读取栈顶元素(Top/Peek) |
典型比喻 | 排队(先到先得) | 摞盘子(后放的先取) |
应用场景 | 广度优先搜索、任务调度、缓冲区等 | 深度优先搜索、函数调用、表达式求值等 |