基本概念

队列

队列(Queue)是一种先进先出(First In First Out,简称FIFO)的线性表,只允许在表的一端(称为队尾,rear)进行插入,在另一端(称为队头,front)进行删除。

  • 插入操作称为入队(enqueue)
  • 删除操作称为出队(dequeue)
  • 不含任何元素的队列称为空队列

队列的特点

  • 先进先出(FIFO):最先入队的元素最先出队
  • 操作受限:只能在队尾插入,在队头删除
  • 队头和队尾动态变化:两个指针分别随着出队和入队操作移动

队列的基本操作

操作说明
InitQueue(&Q)初始化一个空队列
DestroyQueue(&Q)销毁队列,释放内存
EnQueue(&Q, x)将元素 xx 入队
DeQueue(&Q, &x)队头元素出队,用 xx 返回
GetHead(Q, &x)读取队头元素,用 xx 返回(不出队)
QueueEmpty(Q)判断队列是否为空
QueueLength(Q)返回队列中元素的个数

习题

习题 1

队列的特点是( )

A. 先进先出 B. 后进先出 C. 随机进出 D. 按优先级进出

答案与解析

答案:A

解析:队列是一种先进先出(First In First Out,FIFO)的线性表,只允许在队尾插入,在队头删除。最先入队的元素最先出队。

习题 2

设栈S和队列Q的初始状态均为空,元素 a、b、c、d、e、f 依次进入栈S。若每个元素出栈后立即进入队列Q,且6个元素出队的顺序是 b、d、c、f、e、a,则栈S的容量至少是( )

A. 2 B. 3 C. 4 D. 5

答案与解析

答案:B

解析: 队列的特点是先进先出,所以出队顺序就是入队顺序,也就是出栈顺序:b, d, c, f, e, a。

模拟入栈出栈过程:

  1. a入栈(栈:[a])
  2. b入栈(栈:[a,b])→ b出栈(栈:[a])
  3. c入栈(栈:[a,c])
  4. d入栈(栈:[a,c,d])→ d出栈(栈:[a,c])→ c出栈(栈:[a])
  5. e入栈(栈:[a,e])
  6. f入栈(栈:[a,e,f])→ f出栈(栈:[a,e])→ e出栈(栈:[a])→ a出栈

栈中最多同时有3个元素(a,c,d 或 a,e,f),所以容量至少是3。

习题 3

简述队列的定义和主要特点。队列和栈有什么区别?

答案与解析

队列的定义:队列是一种先进先出(FIFO)的线性表,只允许在表的一端(队尾)进行插入,在另一端(队头)进行删除。

主要特点

  1. 先进先出(FIFO):最先入队的元素最先出队
  2. 操作受限:只能在队尾插入(入队),在队头删除(出队)
  3. 队头和队尾动态变化:两个指针分别随着出队和入队操作移动

队列与栈的区别

  • 栈是后进先出(LIFO),队列是先进先出(FIFO)
  • 栈只允许在一端(栈顶)进行插入和删除
  • 队列允许在一端(队尾)插入,在另一端(队头)删除
  • 栈适合处理”最后来的先处理”的场景(如函数调用、表达式求值)
  • 队列适合处理”先来先服务”的场景(如任务调度、缓冲区管理)