(1)、试题
一 、判断(每小题1分,共10分)
1.在有n个叶子结点的哈夫曼树中,其结点总数2n+1。
2.从循环单链表的任一结点出发,可以找到表中所有结点。
3.完全二叉树的叶子结点只能出现在最后一层上。
4.一个广义表的表尾总是一个广义表。
5.散列法是一种对关键字进行运算的查找方法。
6.有回路的图不能进行拓朴排序。
7.在顺序存储的线性表中,逻辑上相邻的两个数据元素在物理位置上并不一定紧邻。
8.单链表设置头结点的目的是为了简化运算。
9.快速排序在任何情况下,都是速度最快的一种排序方法。
10.对于同一组记录,生成的二叉排序树的形态与记录的输入次序无关。
二、选择(每题1分,共15分)
1.为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。
A)栈 B)队列 C)树 D)图
2.若线性表最常用的操作是存取第i个元素及其前趋的值,那么最节省操作时间的存储方式是( )。
A)单链表 B)双链表 C)单循环链表 D)顺序表
3.下面程序段的时间复杂度是()。
for (i=0;i<n;i++)
for(j=0;j<n;j++)
A[i][j]=1;
A)O(n) B)O(n+n+1) C)O(n+n) D)O(n*n)
4.设串s1="ABCDEFG",s2="PQRST",函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i的字符起开始的j个字符的子串,len(s)返回串s的长度,则con( subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是()。
A)BCDEF B)BCDEFG C)BCPQRST D)BCDEFEF
5.下列二叉排序树中,满足平衡二叉树定义的是
6.设一个栈的输入序列为12345,则借助一个栈所得到的输出序列不可能是()。
A)54321 B)45321 C)43512 D)12345
7.采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是( )
A)递归次数与初始数据的排列次序无关
B)每次划分后,先处理较长的分区可以减少递归次数
C)每次划分后,先处理较短的分区可以减少递归次数
D)递归次数与每次划分后得到的分区处理顺序无关
8.已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则完全二叉树的结点个数最多是
A)39 B)52 C)111 D)119
9.设结点A有3个兄弟结点且结点B为结点A的双亲结点,则结点B的度数为( )。
A) 3 B) 4 C) 5 D) 1
10.对n(n≥2)个权值均不相同的字符构成哈夫曼树,关于该树的叙述中,错误的是( )
A)该树一定是一棵完全二叉树 B)树中一定没有度为1的结点
C)树中两个权值最小的结点一定是兄弟结点 D)树中任一非叶结点的权值一定不小于下一层任一结点的权值
11.设单链表中指针p指向结点A,要删除A之后的结点(若存在),则修改指针的操作为( )。
A)p—>next=p—>next—>next B)p=p—>next C)p=p—>next—>next D)p—>next=p
12.若数据元素序列11,12,13,7,8,9,23,4,5是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是( )。
A)冒泡排序 B)插入排序 C)选择排序 D)二路归并排序
13.用折半查找法在有序表{3,4,10,13,33,46,63,76,78,95,120}中查找95时,需进行的比较次数为()
A)2 B)3 C)4 D)5
14.若无向图G=(V,E)中含7个顶点,则保证图G在任何情况下都是连通的,则需要的边数最少是( )。
A)6 B)15 C)16 D)21
15.下面的序列中,()是堆。
A)1,2,8,4,3,9,10,5 B)1,5,10,6,7,8,9,2
C)9,8,7,6,4,8,2,1 D)9,8,7,6,5,4,3,7
三、填空(每空1分,共25分)
1.有一个不含头结点的单链表,头指针为head,则判断其为空的条件为( )。
2.设有向图G用邻接矩阵A[n][n]作为存储结构,则该邻接矩阵中第i行上所有元素之和等于顶点i的( ),第i列上所有元素之和等于顶点i的( )。
3.设有一稀疏图G,则G采用( )存储结构较省空间。
4.对于关键字序列(12,13,11,18,60,15,7,18,25,100),用筛选法建堆,必须从键值为( )的结点开始。
5.我们学过的构造散列函数的方法有数字分析法、()、分段叠加法、()、伪随机数法。
6.在使用Kruskal算法构造连通网络的最小生成树时,只有当一条候选边的两个端点不在同一个( )上,才会被加入到生成树中。
7.栈和队列是运算()的线性表。
8.设有向图的邻接矩阵为A,如果图中不存在弧<Vi,Vj>,则A[i,j]的值为()。
9.判断线索二叉树中某结点指针P所指结点有左孩子的条件是( )。
10.不含任何字符的串称为( )。
11.在插入排序、冒泡排序、快速排序、归并排序等排序算法中,占用辅助空间最多的是 ( )。
12.一棵树如下所示,该树的度为( ),该树的层数为(),该树的根为(),结点L为()结点,结点D的双亲是(),结点F的度为()。
13.对以下二叉树分别以前序、中序、后序遍历,所得序列为()、()、()。
14.设一棵二叉树中有n个结点,则当用二叉链表作为其存储结构时,该二叉链表中共有( )个空指针域。
15. 在索引表中,每个索引项至少包含有( )域和( )域这两项。
四、简答题(每题5分,共30分)
1.用序列(46,68,45,98,70,58,90,10,88,89)建立一个二叉排序树,画出该树,并求在等概率情况下查找成功的平均查找长度。
2.字符a,b,c,d,e,f,g的使用频度分别是0.07,0.09,0.12,0.22,0.20,0.27,0.03,画出Huffman树,写出a,b,c,d,e,f,g的Huffman编码。
3.下图是用邻接表存储的图,画出此图,并写出从顶点C开始按深度优先遍历该图的结果。
4.设哈希函数H(K)=k%13,给定键值序列为19,1,23,14,55,20,84,27,68,11,10,77,处理冲突的方法为线性探测再散列,试在0~18的散列地址空间中对该关键字序列构造哈希表,并计算该表查找成功的平均查找长度和查找不成功的平均查找长度。
5.已知一棵二叉树的前序遍历序列:EBADCFHGIKJ,中序遍历序列:ABCDEFGHIJK,试画出该二叉树。
6.已知关键字集合:{ 46,55,13,42,94,17,05,70 },用选择排序从小到大排序,分别写出第一趟、第二趟、第三趟排序结束时的序列,该排序方法稳定吗?
五、算法设计题(每题10分,共20分)
1.设有一个由正整数组成的无序单链表,编写完成下列功能的算法:
(1)找出最大值结点,且打印该数值;
(2)若该数值是偶数,则将其与直接后继结点的数值交换;
单链表类型描述:
typedef struct Node
{ ElemType data;
struct Node * next;
}Node, *LinkList;
2.已知一个二叉树采用二叉链表存放,设计一个算法将所有结点的左、右子树相互交换。
二叉链表类型描述为:
typedef struct Node
{
DataType data;
struct Node * lchild;
struct Node * rchild;
}BiTNode, *BiTree;
(2)答案
一 、判断(每小题1分,共10分)
1 ╳ 2√ 3╳ 4√ 5√ 6√ 7╳ 8√ 9╳ 10╳
二、选择(每题1分,共15分)
1.B 2.D 3.D 4.D 5.B 6.C 7.D 8.C 9.B 10.A
11.A 12.B 13.B 14.A 15.A
三、填空(每空1分,共25分)
1.head==NULL
2.出度 入度
3.邻接表
4. 60
5.平方取中法 除留余数法
6.集合
7.受限
8.0
9.p->ltag==0
10.空串
11.归并排序
12.3 4 A 叶子(终端) A 0
13.ABDGCEF DGBAECF GDBEFCA
14.n+1
15. 块内最大(小)关键字 块起始地址
四、简答题(每题5分,共30分)
Huffman编码: 7(a):11111
9(b):1110
12(c ):110
22(d):01
20(e):00
27(f):10
3(g):11110