数据结构问答题

1、设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有()个空指针域。

哈夫曼树不存在入度为1 的结点,所以n0=n2+1 
设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有(2m)个空指针域; n0=m 
树的二叉链表存储结构就是孩子-兄弟表示法。 
孩子-兄弟表示法:数据域是结点,如A; 有两个指针域:1)指向长子 2)指向右兄弟 
哈夫曼树的孩子-兄弟表示法的空指针域有三种情况:(1)叶子结点长子域一定为空m个(2)根节点的右兄弟域一定为空 1个 (3)除去根节点外,哈夫曼树的其余结点个数中有一半结点的右兄弟域为空 (n总-1)/2=n2 

所以空指针域=m+1+n2=2m

哈夫曼树权值结点的父结点实际上是没有值的

2、设顺序循环队列Q[0: M-1]的头指针和尾指针分别为F和R.头指针F总是指向队头元素的前一位置.尾指针R总是指向队尾元素的当前位置.则该循环队列中的元素个数为:(R-F+M)%M

书中定义的队列长度为:(rear-front++QueueSize)%QueueSize
1.rear: 定义中是指向末尾元素的下一个位置, 本题中是直接指向末尾元素, 所以将rear向后移动一个位置, R-1
2.front:定义中是指向首元素, 而本题中是指向首元素的前一个元素, 因此向后移动一个位置, F-1
rear = R-1      front = F-1        所以: [ (R - 1) - ( F - 1) + M]%M  =  (R-F+M)%M 

注意是循环队列,头可能在尾的后面,所以要+M%M

3、设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不超过(log2(n)+1)

因为二分查找每次排除掉一半的不适合值,所以对于n个元素的情况:一次二分剩下:n/2,两次二分剩下:n/2/2 = n/4
,m次二分剩下:n/(2^m),在最坏情况下是在排除到只剩下最后一个值之后得到结果,所以为,n/(2^m)=1;2^m=n;
此时时间复杂度为log2(n),再与最后一个元素比较复杂度+1,所以时间复杂度为:log2(n)+1

4、设一棵m叉树中度数为0的结点数为N0 ,度为1的结点数为Nl ..,度数为m的结点数为Nm,则N0=l+N2+2N3+3N4+……+(m-1)Nm)。

5、若不带头结点的单链表中,头指针为head,则该链表为空的判定条件是head==NULL                                                                                  题目中给出的单链表head是不带头结点的单链表,头结点是指在单链表head第一个结点之前附设的一个结点,头结点的数据域可以不存放任何数据信息,而其指针域存放指向第一个结点的指针。在题目中告诉了我们,第一个结点的指针为head,而整个单链表的存储必须从第一个结点进行,如果链表为空,则说明第一个结点为空,因此链表为空的判定条件是head==NULL。

6、设二叉树中结点的两个指针域分别为 lchild 和 rchild,则判断指针变量 p 所指向的结点为叶子 结点的条件是___p->lchild==NULL && p->rchild==NULL

7、设一组初始记录关键字序列为 (20  12  42  31  18  14  28) ,则根据这些记录关键字构造的二叉排序树的平均查找长度是:19/7


二叉排序树构造方法不唯一,但平均查找长度是一样的;比如上图的ASL=层序号乘以该层对应的结点数的累加和再除以总结点=======(1+2*2+3*2+4*2)/7=19/7

先画出排序二叉树,答案就很简单了:(1+2*2+3*2+4*2)/7=19/7
如果自己一上来就画出一颗完全二叉树,结果就是17/7了。。。。。这是错的

8、设指针变量 p 指向双向循环链表中的结点 X ,则删除结点 X 需要执行的语句序列为 1 (设结点中的两个指针域分别为 llink  rlink )。   p->llink->rlink=p->rlink; p->rlink->llink=p->llink;


猜你喜欢

转载自blog.csdn.net/dongfei2033/article/details/80702157