内容正文:
3.2队列(分层作业)
【夯实基础】
1. 队列是一种什么性质的线性表? ( )
A. 先进先出(FIFO)
B. 后进先出(LIFO)
C. 无特定顺序
D. 随机访问
2. 队列中允许插入的一端被称为?( )
A. 队首
B. 队尾
C. 队中
D. 两端均可
3. 队列中允许删除的一端是什么?( )
A. 队首
B. 队尾
C. 队中
D. 两端均可
4. 队列的基本特性不包括?( )
A. 先进先出
B. 后进后出
C. 无限序列性
D. 线性结构
5. 在队列中,新元素添加的位置是?( )
A. 队首
B. 队尾
C. 随机位置
D. 队首或队尾
6. 队列中的元素被移除时,从哪里开始?( )
A. 队首
B. 队尾
C. 中间
D. 任意位置
7. 队列为空时,队首和队尾的指针关系是?( )
A. head = tail
B. head < tail
C. head > tail
D. 不确定
8. 队列满时(假设使用数组实现),队首和队尾的指针关系可能是?( )
A. head = tail
B. head = (tail + 1) % n (n为数组长度)
C. head - tail = n - 1
D. head = tail - n
【巩固提升】
9. 以下哪种数据结构最适合模拟现实中的排队场景?( )
A. 栈
B. 队列
C. 树
D. 图
10. 队列中元素的个数可以通过什么表示?( )
A. head - tail
B. tail - head
C. (tail - head + 队列长度) % 队列长度
D. head + tail
11. 建立一个空队列时,队首指针head初始化为?( )
A. 0
B. 1
C. 队列长度
D. 队列长度+1
12. 使用数组实现队列,当tail到达数组末尾时,如何处理以实现循环?( )
A. tail = 0
B. tail = head
C. tail = tail - 队列长度
D. 创建新数组
13. 队列中元素的访问顺序是什么?( )
A. 先访问队首元素
B. 先访问队尾元素
C. 随机访问
D. 同时访问队首队尾
【拓展应用】
填空题1:数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为______。
填空题2: 循环队列是一种特殊的队列实现方式,它通过使用______来解决固定大小队列中“假溢出”问题,即当队尾指针达到数组末端时,不是停止入队,而是将其重置到数组的______继续入队。
参考答案:
【夯实基础】
1. A. 解析:队列是一种遵循先进先出原则的线性表,即最先入队的元素会最先出队。
2. B 解析:队列的新元素总是在队尾加入。
3. A. 解析:队列的元素移除总是从队首开始。
4. C. 解析:队列的长度是有限的,它是一种有限序列性结构,因此不包括无限序列性。
5. B. 解析:队列新元素的添加总是在队列的尾部进行。
6. A. 解析:队列元素的移除总是从队首开始,即最先入队的元素先出队。
7. A. 解析:当队列为空时,没有元素,队首和队尾指针都指向同一个位置,通常是-1或者0。
8. B. 解析:在循环队列中,当队列满时,队尾指针加1后对数组长度取模的结果会等于队首指针。这是因为队列满时再加一个元素会导致队尾指针回到数组的开始,而队首指针保持不变,形成循环。在非循环队列中,满的条件通常是 `tail == (head + n - 1) % n` 或直接使用固定大小判断,但根据题目提供的选项,B项最符合循环队列满时的情况。
【巩固提升】
9. B解析:队列遵循先进先出(FIFO)原则,与现实生活中排队的“先到先服务”模式完全一致,因此队列最适合模拟排队场景。
10. C 解析:在循环队列中,队首(head)和队尾(tail)指针可能会重叠,直接相减可能得到负数或错误的结果。因此,正确计算队列中元素个数的公式是将队尾指针减去队首指针后加上队列长度,再对队列长度取模,以确保结果为正且准确。
11. A 解析:通常情况下,建立一个空队列时,队首指针初始化为0,表示队列开始的位置。
12. A 解析:在循环队列的实现中,当tail指针到达