1:在一个以h为头的单循环链中,p指针指向链尾的条件是(A)
A:p->next=h
B:p->next=NULL
C:p->next->next=h
D:p->data=-1
解析:p指向链尾也就是说p的下一个是头结点(因为是循环链表),所以p->next=h
2:在9阶B-树中,除叶子以外的任意结点的分支数介于5和9之间 (B)
A:对
B:错
解析:B-树的阶数m决定了节点的分支数(m/2的上整,m),但是有两个例外,一个是叶节点,另外一个是根节点,根节点允许有两个分支。
3:由树转化成二叉树,该二叉树的右子树不一定为空。( B)
A:正确
B:错误
解析:树转换为二叉树因为根节点没有兄弟,所以该二叉树的右字树一定为空
4:若有定义"char a [10], *p=a; ”,那么下列赋值语句正确的是( D)。
A:a [] =“abcdefg”;
B:a=”abedefg";
C:*p=”abcdefg";
D:p=”abcdefg ";
解析:
A选项,应该是a[10]=“abcdefg”
B选项,a是数组首地址不能这样赋值
C选项,*p=a,也是指针地址变量,不能这样赋值
D正确
5:用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j沿链移动的操作为(A)
A:j=r[j].next
B:j=j+1
C:j=j->next
D:j=r[j]->next
解析:静态链表是用数组模拟,所以不用指针的->用点。要移动,则必须要有next
6:下图为一个二叉树,请选出以下不是遍历二叉树产生的顺序序列的选项(BD)
A:ABCDEFIGJH
B:BDCAIJGHFE
C:BDCAIFJGHE
D:DCBJHGIFEA
解析:A为前序遍历,C为中序遍历
7:若有说明:int a[10];,则对数组元素的正确引用是(D)。
A:a[10]
B:a[3,5]
C:a(5)
D:a[10-10]
解析:A中下标越界,D为a[0],正确
8:B- 树的插入算法中,通过结点的向上“分裂”,代替了专门的平衡调整。(A)
A:正确
B:错误
解析:B-树的插入过程是一个动态调整的过程。设B-树的度为m,则在插入时,会先找到合适的节点位置,插入到相应位置,然后判断该节点的关键字个数是否超过m-1,若超过则作“分裂”处理——将中间节点上移插入到父节点中,原来节点的左边(原来中间节点的左边)放在原来的节点中不变,而右边则放入到新节点中,然后再判断父节点的度,超过则作相同的分裂操作,每次分裂都是向上传递,因此很好的保证了B-树的平衡性。
9: 有n个数顺序(依次)入栈,出栈序列有Cn种,Cn=[1/(n+1)]*(2n)!/[(n!)*(n!)](A)
A:正确
B:错误
解析:带入数据,当n=2或者n=3时,计算结果正确
10:以下是一个tree的遍历算法,queue是FIFO队列,请参考下面的tree,正确的输出是(C)
queue.push(tree.root)
while(true)
node = queue.pop()output(node.value)//输出节点对应数字
if(null==node)
break
for(child_node in node.children)
queue.push(child_node)
A:1376254
B:1245367
C:1234567
D:1327654
解析:首先输出1,将2 3加入队列中,然后输出2,将4 5加入队列,然后输出3将6 7加入队列,再依次输出。即123456