1、对于循环队列,下列叙述中正确的是( )。
正确答案: D 你的答案: D (正确)
队头指针是固定不变的
队头指针一定大于队尾指针
队头指针一定小于队尾指针
队头指针可以大于队尾指针,也可以小于队尾指针
解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以对头指针有时可能大于队尾指针有时也可能小于队尾指针,入队时 尾指针追着头指针,出队的时候 头指针追着尾指针 。对于队列,队头和队尾指针是一个在队头,一个在队尾,不可以改变,因此队头指针小于队尾指针。
而对于循环队列,队头和队尾指针也是一个在队首,一个在队尾,但是可以改变,因此队头指针可以大于队尾指针,也可以小于队尾指针。
2、下列叙述中正确的是( )。
正确答案: D 你的答案: D (正确)
循环队列有队头和队尾两个指针,因此,循环队列是非线性结构
在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况
在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况
循环队列中元素的个数是由队头指针和队尾指针共同决定
解析:循环队列中,入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,所以需要头尾指针共同来反映入队和出队。而且元素个数=(尾指针-头指针+队列容量)%队列容量。
3、队列的“先进先出”特性是指 。
正确答案: D 你的答案: D (正确)
最早插入队列中的元素总是最后被删除
当同时进行插入、删除操作时,总是插入操作优先
每当有删除操作时,总是要先做一次插入操作
每次从队列中删除的总是最早插入的元素
4、队列是一种插入和删除操作分别在表的两端进行的线性表,是一种先进后出的结构,这样的说法正确吗?
正确答案: B 你的答案: B (正确)
正确
不正确
5、下列叙述中正确的是
正确答案: A 你的答案: A (正确)
循环队列中的元素个数随队头指针与队尾指针的变化而动态变化
循环队列中的元素个数随队头指针的变化而动态变化
循环队列中的元素个数随队尾指针的变化而动态变化
以上说法都不对
解析:循环队列中的元素个数与队头指针和队尾指针的变化而变化
6、递归算法一般需要利用哪种数据结构实现?
正确答案: D 你的答案: C (错误)
数组
链表
队列
栈
解析:递归的过程就是压栈的过程,先把数据压进栈,递归结束时,开始一一出栈。递归算法就是栈的过程。
7、设循环队列的结构是:
const int Maxsize=100;
typedef int Data Type;
typedef struct {
Data Type data[Maxsize];
int front, rear;
}Queue;
若 一个 Queue 类型的队列 Q ,试问判断队列满的条件应是下列哪一个语句
正确答案: D 你的答案: D (正确)
Q.frontQ.rear;
Q.front-Q.rearMaxsize;
Q.front+Q.rear=Maxsize;
Q.front==(Q.rear+1)%Maxsize;
解析:循环队列中,由于入队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。因此,无法通过条件frontrear来判别队列是"空"还是"满"。
解决这个问题的方法至少有两种:
① 另设一布尔变量以区别队列的空和满;
②另一种方式就是数据结构常用的: 队满时:(rear+1)%nfront,n为队列长度(所用数组大小),由于rear,front均为所用空间的指针,循环只是逻辑上的循环,所以需要求余运算.
8、对于循环队列 。
正确答案: D 你的答案: D (正确)
无法判断队列是否为空
无法判断队列是否为满
队列不可能满
以上说法都不对
9、以下哪一个不是队列的基本运算?( )
正确答案: A 你的答案: D (错误)
在队列第i个元素之后插入一个元素
从队头删除一个元素
断一个队列是否为空
读取队头元素的值
10、队列逻辑上是一个下端和上端既能增加又能减少的线性表()
正确答案: B 你的答案: A (错误)
对
错
解析:队列是一种操作受限 的结构,即只能在队首删除和队尾插入
11、设循环队列的容量为50(序号从0到49),现经过一系列的入队和出队运算后,有 front=16,rear=5(rear指向队尾元素的后一位置),当前循环队列中元素个数为( )
正确答案: B 你的答案: D (错误)
11
39
40
12
解析:求队列元素的个数的计算公式为:求循环队列中的元素个数的公式为:(rear-front+size)%size,size是循环队列的容量
12、设顺序循环队列Q[0,M-1]的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位,尾指针R总是指向队尾元素的当前位置,则该循环队列职工的元素个数为( )?
正确答案: B 你的答案: B (正确)
(F-R)%M
(R-F+M)%M
(F-R+M)%M
R-F-1
13、最大容量为n的循环队列,队尾指针是rear,队头是front,则队满的条件是()。
正确答案: A 你的答案: A (正确)
(rear+1) MOD nfront
rearfront
rear+1front
(rear-1) MOD nfront
解析:循环队列为空:front == rear;
循环队列为满:(rear + 1) % n == front
14、执行()操作时,需要使用队列作为辅助存储空间。
正确答案: B 你的答案: B (正确)
查找哈希(hash)表
广度优先搜索图
先序(根)遍历二叉树
深度优先搜索图
解析:BFS广度优先算法需要队列的辅助,深度优先需要栈的辅助。
15、循环队列的出队操作为()。
正确答案: A 你的答案: A (正确)
sq.front=(sq.front+1)% maxsize;
sq.front=sq.front+1;
sq.rear=(sq.rear+1)% maxsize;
sq.rear=sq.rear+1;
解析:入队应该和队尾有关,
16、循环队列存储在数据A[0…m]中,则入队时的操作为______ 。
正确答案: D
rear=rear+1
rear=(rear+1)%(m-1)
rear=(rear+1)%m
rear=(rear+1)%(m+1)
17
用链接方式存储的队列,在进行删除运算时( )。
正确答案: D 你的答案: A (错误)
仅修改头指针
仅修改尾指针
头、尾指针都要修改
头、尾指针可能都要修改
解析:在有头结点的链队列的出队操作中,一般只需修改队头指针,但当原队列中只有一个结点时,该结点既是队头也是队尾,故删去此结点时亦需修改队尾指针,使其指向头结点,且删去此结点后队列变空。