(A)O(n1/2)(B)O(n1/3)(C)O(n)(D)O(n2)
3.设顺序表中有n个数据元素,则删除表中第i个元素需要移动(A)个元素。
(A)n-i(B)n+l-i(C)n-1-i(D)i
4.设某链表中最常用的操作是在链表的尾部插入或删除元素,则选用下列(D)存储方式最节省运算时间。
(A)单向链表(B)单向循环链表
(C)双向链表(D)双向循环链表
5.设
是由
、
和
三棵树组成的森林,与
对应的二叉树为
,
、
和
的结点数分别为
、
和
,则二叉树B的根结点的左子树的结点数为(A)。
(A)
(B)
(C)
(D)
6.设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为(B)。
(A)s->next=p->next;p->next=-s;(B)q->next=s;s->next=p;
(C)p->next=s->next;s->next=p;(D)p->next=s;s->next=q;
7.利用直接插入排序法的思想建立一个有序线性表的时间复杂度为(C)。
(A)
(B)
(C)
(D)
8.设输入序列为1,2,3,4,5,6,则通过栈的作用后可以得到的输出序列为(B)。
(A)5,3,4,6,1,2(B)3,2,5,6,4,1
(C)3,1,2,5,4,6(D)1,5,4,6,2,3
9.设指针变量p指向双向链表中结点A,指针变量s指向被插入的结点X,则在结点A的后面插入结点X的操作序列为(D)。
(A)p->right=s;s->left=p;p->right->left=s;s->right=p->right;
(B)s->left=p;s->right=p->right;p->right=s;p->right->left=s;
(C)p->right=s;p->right->left=s;s->left=p;s->right=p->right;
(D)s->left=p;s->right=p->right;p->right->left=s;p->right=s;
10.设有一个10阶的下三角矩阵A(包括对角线),按照从上到下、从左到右的顺序存储到连续的55个存储单元中,每个数组元素占1个字节的存储空间,则A[5][4]地址与A[0][0]的地址之差为(B)。
(A)10(B)19(C)28(D)55
11.下列各种排序算法中平均时间复杂度为
是(D)。
(A)快速排序(B)堆排序(C)归并排序(D)冒泡排序
12.设一棵m叉树中有
个度数为1的结点,
个度数为2的结点,…,
个度数为m的结点,则该树中共有(D)个叶子结点。
(A)
(B)
(C)
(D)
13.设输入序列1、2、3、…、n经过栈作用后,输出序列中的第一个元素是n,则输出序列中的第i个输出元素是(C)。
(A)n-i(B)n-1-i(C)n+l-i(D)不能确定
14.二叉排序树中左子树上所有结点的值均(A)根结点的值。
(A)<(B)>(C)=(D)>=
15.设散列表中有m个存储单元,散列函数H(key)=key%p,则p最好选择(B)。
(A)小于等于m的最大奇数(B)小于等于m的最大素数
(C)小于等于m的最大偶数(D)小于等于m的最大合数
16.设一组权值集合W=(15,3,14,2,6,9,16,17),要求根据这些权值集合构造一棵哈夫曼树,则这棵哈夫曼树的带权路径长度为(D)。
(A)129(B)219(C)189(D)229
17.设在一棵度数为3的树中,度数为3的结点数有2个,度数为2的结点数有1个,度数为1的结点数有2个,那么度数为0的结点数有(C)个。
(A)4(B)5(C)6(D)7
18.设有n个关键字具有相同的Hash函数值,则用线性探测法把这n个关键字映射到HASH表中需要做(D)次线性探测。
(A)n(B)n(n+1)(C)n(n+1)/2(D)n(n-1)/2
19.设完全无向图中有n个顶点,则该完全无向图中有(A)条边。
(A)n(n-1)/2(B)n(n-1)(C)n(n+1)/2(D)(n-1)/2
20.设某棵二叉树中只有度数为0和度数为2的结点且度数为0的结点数为n,则这棵二叉中共有(C)个结点。
(A)2n(B)n+l(C)2n-1(D)2n+l
21.设顺序表的长度为n,则顺序查找的平均比较次数为(C)。
(A)n(B)n/2(C)(n+1)/2(D)(n-1)/2
22.设一组初始记录关键字的长度为8,则最多经过(B)趟插入排序可以得到有序序列。
(A)6(B)7(C)8(D)9
23.设有序表中的元素为(13,18,24,35,47,50,62),则在其中利用二分法查找值为24的元素需要经过(C)次比较。
(A)1(B)2(C)3(D)4
24.设一组初始记录关键字序列为(Q,H,C,Y,P,A,M,S,R,D,F,X),则按字母升序的第一趟冒泡排序结束后的结果是(A)。
(A)F,H,C,D,P,A,M,Q,R,S,Y,X
(B)P,A,C,S,Q,D,F,X,R,H,M,Y
(C)A,D,C,R,F,Q,M,S,Y,P,H,X
(D)H,C,Q,P,A,M,S,R,D,F,X,Y
25.设顺序线性表的长度为30,分成5块,每块6个元素,如果采用分块查找(二分法定块,块内顺序查找),则其平均查找长度为(D)。
(A)6(B)11(C)5(D)6.5
26.设有向无环图G中的有向边集合E={<1,2>,<2,3>,<3,4>,<1,4>},则下列属于该有向图G的一种拓扑排序序列的是(A)。
(A)1,2,3,4(B)2,3,4,1(C)1,4,2,3(D)1,2,4,3
27.设有一组初始记录关键字序列为(34,76,45,18,26,54,92),则由这组记录关键字生成的二叉排序树的深度为(A)。
(A)4(B)5(C)6(D)7
二、填空题(每小题2分)
1.设指针p指向单链表中结点,指针s指向待插入的结点。
若在p所指向的结点之前插入s所指结点,则操作序列为:
1)s->next=______;2)p->next=s;3)t=p->data;
4)p->data=_______;5)s->data=t;
2.设需要对5个不同的记录关键字进行排序,则至少需要比较_____________次,至多需要比较_____________次。
3.设某棵完全二叉树中有100个结点,则该二叉树中有______________个叶子结点。
4.快速排序算法的平均时间复杂度为____________,直接插入排序算法的平均时间复杂度为___________。
5.设某顺序循环队列中有m个元素,且规定队头指针F指向队头元素的前一个位置,队尾指针R指向队尾元素的当前位置,则该循环队列中最多存储_______队列元素。
6.设二叉排序树的高度为h,则在该树中查找关键字key最多需要比较_____次。
7.对一组初始关键字序列(40,50,95,20,15,70,60,45,10)进行冒泡排序,则第一趟需要进行相邻记录的比较的次数为__________,在整个排序过程中最多需要进行__________趟排序才可以完成。
8.设在长度为20的有序表中进行二分查找,则比较一次查找成功的结点数有_________个,比较两次查找成功有结点数有_________个。
9.在堆排序和快速排序中,如果从平均情况下排序的速度最快的角度来考虑应最好选择_____排序,如果从节省存储空间的角度来考虑则最好选择_____排序。
10.设一棵m叉树的结点数为n,用多重链表表示其存储结构,则该树中有_________个空指针域。
11.设一组初始记录关键字序列为(20,12,42,31,18,14,28),则根据这些记录关键字构造的二叉排序树的平均查找长度是___________________。
12.设指针变量p指向单链表中结点A,则删除结点A的语句序列为:
q=p->next;p->data=q->data;p->next=___________;deleteq;
13.设一棵二叉树的中序遍历序列为BDCA,后序遍历序列为DBAC,则这棵二叉树的前序序列为____________________。
14.数据结构从逻辑上划分四种基本类型:
集合、线性表、_______和________。
15.设通信用电文仅有8个字母,频率分别为7、19、2、6、32、3、21、10,根据这些频率作为权值构造哈夫曼树,则这棵哈夫曼树的高度为__________。
16.设无向图G中有n个顶点e条边,则用邻接矩阵作为图的存储结构进行深度优先或广度优先遍历时的时间复杂度为_________;用邻接表作为图的存储结构进行深度优先或广度优先遍历的时间复杂度为_________。
17.设一组记录关键字序列为(80,70,33,65,24,56,48),则
用筛选法建成的初始(小根)堆为_____________________。
18.设散列表的长度为8,散列函数H(k)=k%7,用线性探测法解决冲突,则根据一组初始关键字序列(8,15,16,22,30,32)构造出的散列表的平均查找长度是________。
19.赋权无向图的最小生成树最终使_____________达到了最小。
20.设一组初始关键字序列为(38,65,97,76,13,27,10),则第3趟冒泡排序结束后的结果为_____________________。
21.设一组初始关键字序列为(38,65,97,76,13,27,10),则第3趟简单选择排序后的结果为______________________。
22.设有向图G的有向边的集合E={<1,2>,<2,3>,<1,4>,<4,5>,<5,3>,<4,6>,<6,5>},则该图的一个拓扑序列为_____________________。
三、判断题(每小题1分)
1.有向图的邻接表和逆邻接表中表结点的个数不一定相等。
()
2.对链表进行插入和删除操作时不必移动链表中结点。
()
3.子串“ABC”在主串“AABCABCD”中的位置为2。
()
4.若一个叶子结点是某二叉树的中序遍历序列的最后一个结点,则它必是该二叉树的先序遍历序列中的最后一个结点。
()
5.希尔排序算法的时间复杂度为O(n)。
()
6.用邻接矩阵作为图的存储结构时,则其所占用的存储空间与图中顶点数无关而与图中边数有关。
()
7.中序遍历一棵二叉排序树可以得到一个有序的序列。
()
8.入栈操作和入队列操作在链式存储结构上实现不需要考虑溢出的情况。
()
9.顺序表查找指的是在顺序存储结构上进行查找。
()
10.堆是完全二叉树,完全二叉树不一定是堆。
()
11.所谓数据的逻辑结构指的是数据之间的逻辑关系。
()
12.O(nlogn)13.设p,q是指针,若p=q,则*p=*q。
()
14.有n个元素依次进栈,则出栈序列有(n-1)/2种。
()
15.在循环队列中,front指向队头元素的前一个位置,rear指向队尾元素的位置,则队满的条件是front==rear。
()
16.使用三元组表存储稀疏矩阵的元素,有时并不能节省存储空间。
()
17.二叉树是度为2的树。
()
18.对任一满二叉树,其分枝数B=2(n0-1),其中,n0为终端结点数。
()
19.对任意一个图,从某顶点出发进行一次深度优先或广度优先遍历,可访问图的所有顶点。
()
20.在一个有向图的拓扑序列中,若顶点a在顶点b之前,则图中必有一条从顶点a到顶点b的弧。
()
四、算法阅读填空题(每空2分)
1.请在下面对整数排序的快速排序算法中填上正确的语句。
voidQuickSort(intr[],ints,intt)
{intj=t;intx=r[s];i=s;
while(i{while(i
&&
x)j=j-1;
if(iwhile(________
____________)i=i+1;
if(i;j=j-1;}
}
_________
________;
QuickSort(r,s,i-1);
;
}
2.下面程序段的功能是建立二叉树的算法,请在下划线处填上正确的内容。
typedefstructnode
{intdata;
structnode*lchild;
________________;
}bitree;
voidCreateBiTree(bitree*&bt)
{
charch;
cin>>ch;
if(ch==′#′)___________;
else
{bt=newbitree;
bt->data=ch;
________;
CreateBiTree(bt->rchild);
}
}
3.下面程序段的功能是利用从尾部插入的方法建立单链表的算法,请在下划线处填上正确的内容。
typedefstructnode{intdata;structnode*next;}*lklist;
voidLinkListCreate(_____________,&head)
{for(i=1;i<=n;i++)
{lklistp,q;
p=newnode;
p->next=0;
cin>>p->data;
if(i==1)head=q=p;
else
{q->next=p;____________;}
}
}
五、计算题和应用题(共28~34分)
1.设权值集W={1,4,5,16,6,7}。
按算法构造哈夫曼树(左小右大合并树),并计算带权路径长度。
(5分)
2、对数据:
4,5,3,1,7,按此进入的次序,建立一棵二叉排序树。
(5分)
3.给定键值:
3,14,8,4,13。
构造表长为6,散列函数H(k)=kmod5,用拉链法解决冲突的散列表,并计算查找成功的平均查找长度。
(6分)
4.计算下列模式串的每一位字符的失效函数值。
(4分)
ababbaab
5.用Dijkstra算法求从源点a到其余各个顶点的最短路径及长度。
(6分)
6.求出下列图中一个拓扑序列。
(2分)
7.用PRIM或Kruskal法,求下列图中一个最小生成树。
(5分)
8.计算下列模式串的每一位字符的失效函数值(最小值为-1)。
(5分)
9.顺次扫描数据:
7,4,6,12,8,建立一棵二叉排序树。
(5分)
10.采用线性探测法解决冲突,用初始关键字:
25,32,8,15,12,40建立长度=8、散列函数为H(k)=kmod7的散列表,并计算平均查找长度(含成功和不成功查找两种)。
(6分)
11.列表用Dijkstra算法计算从源点A到其余各顶点的最短路径及长度。
(5分)
12.用Prim法或KRUSKAL法,求上小题的图变成无向图(即将边全改为无向边,其他不变)后的一个最小生成树。
(5分)
13.设权值集W={4,3,8,1,5,7},按算法路线建立唯一一棵哈夫曼树(而不是从逻辑上满足条件的任意一个,即始终要按左小右大的方案来合并两棵最小树)、树叶所对应符号的哈夫曼编码、整棵树的带权路径长度(8分)
六、算法设计题(共15分左右,每小题5分)
1.设计计算二叉树中所有结点值之和的算法。
(5小分)
2.设计将所有奇数移到所有偶数之前的算法。
(5小分)
3.设计判断单链表中元素是否是递增的算法。
(5小分)
4.设计在链式存储结构上合并排序的算法。
(5小分)
5.设计在二叉排序树上查找结点X的算法。
(5小分)
6.设关键字序列(k1,k2,…,kn-1)是堆,设计算法将关键字序列(k1,k2,…,kn-1,x)调整为堆。
提示:
设r[1~n]存放关键字序列数据,r[1~n-1]已是大根堆。
(5小分)
总参考答案
一、选择题(每小题1分))
1.A2.A3.A4.D5.A6.B7.C8.B9.D10.B11.D12.D13.C14.A15.B16.D17.C18.D19.A20.C21.C22.B23.C24.A25.D26.A27.A
二、填空题(每小题2分)
1.p->next,s->data
2.4,10
3.50
4.O(nlog2n),O(n2)
5.m-1
6.h
7.6,8
8.1,2
9.快速,堆
10.n(m-1)+1
11.19/7
12.q->next
13.CBDA
14.树;图
15.6
16.O(n2),O(n+e)
17.(24,65,33,80,70,56,48)
18.8/3
19.8
20.(38,13,27,10,65,76,97)
21.(10,13,27,76,65,97,38)
22.1,2,4,6,5,3
三、判断题(每小题1分)
1.错2.对3.对4.对5.错6.错7.对8.对9.错10.对
11.错12.错13.错14.错15.错16.对17.错18.对19.错20.错
四、算法阅读填空题(每空2分)
1.请在下面对整数排序的快速排序算法中填上正确的语句。
r[j]>=
ir[j]=r[i]
r[i]=x;或r[j]=x;
QuickSort(r,i+1,t)
2.structnode*rchild,bt=0,CreateBiTree(bt->lchild)
3.lklist,q=p
五、计算题(共28~34分)
1.设权值集W={1,4,5,16,6,7}。
按算法构造哈夫曼树(左小右大合并树),并计算带权路径长度。
(5分)
带权路径长度WPL=(1+4)*4+(5+6+7)*3+(16)*1=90
2、对数据:
4,5,3,1,7,按此进入的次序,建立一棵二叉排序树。
(5分)
解:
构造过程如下:
3.给定键值:
3,14,8,4,13。
构造表长为6,散列函数H(k)=kmod5,用拉链法解决冲突的散列表,并计算查找成功的平均查找长度。
(6分)
3
8
13
∧
14
4
∧
0
∧
1
∧
2
∧
3
4
5
∧
ASLsucc=(2*1+2*2+1*3)/5=9/5
4.计算下列模式串的每一位字符的失效函数值(最小值为-1)。
(4分)
ababbaab
-10012011
5.用Dijkstra算法求从源点a到其余各个顶点的最短路径及长度。
(6分)
f
2
e
8
3
3
1
2
a
1
g
d
1
2
4
8
c
16
b
b
c
d
e
f
g
8
∞
1
∞
8
∞
5,adb
3,adc
∞
2,adf
3,adg
5,adb
3,adc
4,adfe
3,adg
4,adcb
4,adfe
3,adg
4,adcb
4,adfe
4,adfe
最短路径及长度:
a->b:
4,adcb
a->c:
3,adc
a->d:
1,ad
a->e:
4,adfe
a->f:
2,adf
a->g:
3,adg
6.求出下列图中的一个拓扑序列。
(2分)
v0,v5,v3,v2,v1,v6,v4
7.用PRIM或Kruskal法,求下列图中一个最小生成树。
(5分)
8.计算下列模式串的每一位字符的失效函数值(最小值为-1)。
(5分)
1001100100
失效函数值:
-1000112340
9.顺次扫描数据:
7,4,6,12,8,建立一棵二叉排序树。
(5分)
7
412
68
10.采用线性探测法解决冲突,用初始关键字:
25,32,8,15,12,40建立长度=8、散列函数为H(k)=kmod7的散列表,并计算平均查找长度(含成功和不成功查找两种)。
(6分)
0
1
2
3
4
5
6
7
8
15
25
32
12
40
要查找成功时比较次数121223
ASLsucc=(1+2+1+2+2+3)/6=11/6
ASLunsucc=(2+1+4+3+2+1)/8=13/8
11.列表用Dijkstra算法计算从源点A到其余各顶点的最短路径及长度。
(5分)
B
B
C
D
E
F
5
2
∞
∞
9
4,ACB
8,ACD
3,ACE
6,ACF
4,ACB
6,ACED
5,ACEF
6,ACED
5,ACEF
6,ACED
A->B:
4,ACB;A->C:
2,AC;A->D:
6,ACED