【数据结构_选择题】(D22 0520)
1、若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。 ( A )
A 顺序表
B 双链表
C 带头结点的双循环链表
D 单循环链表
2、下列数据结构具有记忆功能的是( C )
A 队列
B 循环队列
C 栈
D 顺序表
分析: 理解记忆功能
栈的特点是 先进栈的后出栈,后进栈的先出栈,所以对一个栈进行出栈操作,出来的元素肯定是最后存入栈中的元素,所以栈有记忆功能
队列的特点是 先进先出,取队列的第一个元素,得到的是最先存入队列的元素,而不是上一个存入队列的元素,所以没有记忆功能
3、循环队列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。初始时为空,下列判断队空和队满的条件中,正确的是 ( A )
A 队空:end1 == end2; 队满:end1 == (end2+1)modM
B 队空:end1 == end2; 队满:end2 == (end1+1)mod(M-1)
C 队空:end2 == (end1+1)modM ; 队满:end1 == (end2+1)modM
D 队空:end1 == (end2+1)modM; 队满:end2 == (end1+1)mod(M-1)
分析:
end1 指向队头元素,end2 指向队尾元素的后一个位置,又因为循环队列放在一维数组A[0…M-1]中,那么end1指向队头元素即A[0],故end1 == 0。当队列初始化时,入队操作是把数据存放在数组A当中,然后end2自增,即可知end2 初值为0。因此,可知空队的条件是end1 == end2。
考虑队列满情况,因为队列最多能容纳 M-1 个元素,假设队列存储在下标为0 到下标为M-2 的M-1 个区域,队头为A[0],队尾为A[M-2],此时队列满,end1 指向队头元素,可知end1=0;end2 指向队尾元素的后一个位置,可知end2=M-2+1=M-1。所以可知队满的条件为end1 == (end2+1) mod M,选A。
补充: 循环队列的相关条件和公式
队头指针是front,队尾指针是rear,QueueSize为循环队列的最大长度
条件 | 公式 |
---|---|
队空 | front == rear |
队满 | front == (rear + 1) % QueueSize |
队列长度 | (rear - front + QueueSize) % QueueSize |
入队 | (rear + 1) % QueueSize |
出队 | (front +1 % QueueSize) |
4、对递归程序的优化的一般的手段为( A )
A 尾递归优化
B 循环优化
C 堆栈优化
D 停止值优化
分析: 对于递归程序常见的优化手段有尾递归,迭代,循环
尾递归:在每一次递归的过程中保持了上一次计算的状态,也就是“线性迭代过程”,即在函数返回时,调用自身本身 。尾递归和一般的递归不同在对内存的占用,普通递归创建stack累积而后计算收缩;而尾递归只会占用恒量的内存,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。 尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。
5、将一颗有 100 个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根节点编号为 1 ,则编号为 98 的节点的父节点编号为( C )
A 47
B 48
C 49
D 50
分析: 对于完全二叉树
偶数节点的父节点编号 =该节点编号2=\frac{该节点编号}{2}=2该节点编号,奇数节点的父节点编号 <