(4)排序的平均时间复杂度为O(n?
logn)的算法是()为O(n?
n)的算法是()
2.比较次数与排序的初始状态无关的排序方法是()。
A.直接插入排序B.起泡排序C.快速排序D.简单选择排序
3.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为
(1)8447251521
(2)1547258421
(3)1521258447(4)1521254784
则采用的排序是()。
A.选择B.冒泡C.快速D.插入
4.下列排序算法中()排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A.选择B.冒泡C.归并D.堆
5.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()。
A.(38,40,46,56,79,84)B.(40,38,46,79,56,84)
C.(40,38,46,56,79,84)D.(40,38,46,84,56,79)
6.下列排序算法中,在待排序数据已有序时,花费时间反而最多的是()排序。
A.冒泡B.希尔C.快速D.堆
7.就平均性能而言,目前最好的内排序方法是()排序法。
A.冒泡B.希尔插入C.交换D.快速
8.下列排序算法中,占用辅助空间最多的是:
()
A.归并排序B.快速排序C.希尔排序D.堆排序
9.若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行()次比较。
A.3B.10C.15D.25
10.快速排序方法在()情况下最不利于发挥其长处。
A.要排序的数据量太大B.要排序的数据中含有多个相同值
C.要排序的数据个数为奇数D.要排序的数据已基本有序
11.下列四个序列中,哪一个是堆()。
A.75,65,30,15,25,45,20,10B.75,65,45,10,30,25,20,15
C.75,45,65,30,15,25,20,10D.75,45,65,10,25,30,20,15
12.有一组数据(15,9,7,8,20,-1,7,4),用堆排序的筛选方法建立的初始堆为()
A.-1,4,8,9,20,7,15,7B.-1,7,15,7,4,8,20,9
C.-1,4,7,8,20,15,7,9D.A,B,C均不对。
二、填空题
1.若待排序的序列中存在多个记录具有相同的键值,经过排序,这些记录的相对次序仍然保持不变,则称这种排序方法是________的,否则称为________的。
2.按照排序过程涉及的存储设备的不同,排序可分为________排序和________排序。
3.直接插入排序用监视哨的作用是___________________________。
4.对n个记录的表r[1..n]进行简单选择排序,所需进行的关键字间的比较次数为_______。
5.下面的c函数实现对链表head进行选择排序的算法,排序完毕,链表中的结点按结点值从小到大链接。
请在空框处填上适当内容,每个空框只填一个语句或一个表达式:
#include
typedefstructnode{chardata;structnode*link;}node;
node*select(node*head)
{node*p,*q,*r,*s;
p=(node*)malloc(sizeof(node));
p->link=head;head=p;
while(p->link!
=null)
{q=p->link;r=p;
while(
(1)____________)
{if(q->link->datalink->data)r=q;
q=q->link;
}
if(
(2)___________){s=r->link;r->link=s->link;
s->link=((3)_________);((4)_________);}
((5)________);
}
p=head;head=head->link;free(p);return(head);
}
6.下面的排序算法的思想是:
第一趟比较将最小的元素放在r[1]中,最大的元素放在r[n]中,第二趟比较将次小的放在r[2]中,将次大的放在r[n-1]中,…,依次下去,直到待排序列为递增序。
(注:
<-->)代表两个变量的数据交换)。
voidsort(SqList&r,intn){
i=1;
while(
(1)______){
min=max=1;
for(j=i+1;
(2)________;++j)
{if((3)________)min=j;elseif(r[j].key>r[max].key)max=j;}
if((4)_________)r[min]<---->r[j];
if(max!
=n-i+1){if((5)_______)r[min]<---->r[n-i+1];else((6)______);}
i++;
}
}//sort
7.下列算法为奇偶交换排序,思路如下:
第一趟对所有奇数的i,将a[i]和a[i+1]进行比较,第二趟对所有偶数的i,将a[i]和a[i+1]进行比较,每次比较时若a[i]>a[i+1],将二者交换;以后重复上述二趟过程,直至整个数组有序。
voidoesort(inta[n])
{intflag,i,t;
do{flag=0;
for(i=1;iif(a[i]>a[i+1])
{flag=
(1)______;t=a[i+1];a[i+1]=a[i];
(2)________;}
for(3)________
if(a[i]>a[i+1])
{flag=(4)________;t=a[i+1];a[i+1]=a[i];a[i]=t;}
}while(5)_________;
}
三、应用题
1.对于给定的一组键值:
83,40,63,13,84,35,96,57,39,79,61,15,分别画出应用直接插入排序、直接选择排序、快速排序、堆排序、归并排序对上述序列进行排序中各趟的结果。
2.判断下列序列是否是堆(可以是小堆,也可以是大堆,若不是堆,请将它们调整为堆)。
(1)100,85,98,77,80,60,82,40,20,10,66
(2)100,98,85,82,80,77,66,60,40,20,10
(3)100,85,40,77,80,60,66,98,82,10,20
(4)10,20,40,60,66,77,80,82,85,98,100
3.填空并回答相关问题
(1)下面是将任意序列调整为最大堆(MAXHEAP)的算法,请将空白部分填上:
将任意序列调整为最大堆通过不断调用adjust函数,即:
FOR(i=n/2;i>0;i--)adjust(list,i,n);其中list为待调整序列所在数组(从下标1开始),n为序列元素个数,adjust函数为:
voidadjust(intlist[],introot,intn)
/*将以root为下标的对应元素作为待调整堆的根,待调整元素放在list数组中,最大元素下标为n*/
{intchild,rootkey;
rootkey=list[root];
child=2*root;
while(child<=n)
{if((child(1)_______;
if(rootkey>list[child])
break;
else{List[
(2)]=list[child];
child*=2;
}
}
list[child/2]=rootkey;
}
(2).判断下列序列能否构成最大堆:
(12,70,33,65,24,56,48,92,86,33);
若不能按上述算法将其调整为堆,调整后的结果为:
()。
数据结构习题--查找
一、单项选择题
1.顺序查找法适合于存储结构为()的线性表。
A.散列存储B.顺序存储或链式存储
C.压缩存储D.索引存储
2.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为()。
A.(n-1)/2B.n/2C.(n+1)/2D.n
3.适用于折半查找的表的存储方式及元素排列要求为()
A.链接方式存储,元素无序B.链接方式存储,元素有序
C.顺序方式存储,元素无序D.顺序方式存储,元素有序
4.当在一个有序的顺序存储表上查找一个数据时,即可用折半查找,也可用顺序查找,但前者比后者的查找速度()
A.必定快B.不一定C.在大部分情况下要快D.取决于表递增还是递减
5.当采用分块查找时,数据的组织方式为()
A.数据分成若干块,每块内数据有序
B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块
C.数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块
D.数据分成若干块,每块(除最后一块外)中数据个数需相同
6.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。
这种说法()。
A.正确B.错误
7.二叉查找树的查找效率与二叉树的(
(1))有关,在(
(2))时其查找效率最低。
(1):
A.高度B.结点的多少C.树型D.结点的位置
(2):
A.结点太多B.完全二叉树C.呈单枝树D.结点太复杂。
8.如果要求一个线性表既能较快的查找,又能适应动态变化的要求,则可采用()查找法。
A.分快查找B.顺序查找C.折半查找D.基于属性
9.分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是()。
A.(100,80,90,60,120,110,130)B.(100,120,110,130,80,60,90)
C.(100,60,80,90,120,110,130)D.(100,80,60,90,120,130,110)
10.下图所示的4棵二叉树,()是平衡二叉树。
(A)(B)(C)(D)
11.散列表的平均查找长度()。
A.与处理冲突方法有关而与表的长度无关
B.与处理冲突方法无关而与表的长度有关
C.与处理冲突方法有关且与表的长度有关
D.与处理冲突方法无关且与表的长度无关
12.设有一组记录的关键字为{19,14,23,1,68,20,84,27,55,11,10,79},用链地址法构造散列表,散列函数为H(key)=keyMOD13,散列地址为1的链中有()个记录。
A.1B.2C.3D.4
13.关于杂凑查找说法不正确的有几个()
(1)采用链地址法解决冲突时,查找一个元素的时间是相同的
(2)采用链地址法解决冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的
(3)用链地址法解决冲突易引起聚集现象
(4)再哈希法不易产生聚集
A.1B.2C.3D.4
14.设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是()
A.8B.3C.5D.9
15.将10个元素散列到100000个单元的哈希表中,则()产生冲突。
A.一定会B.一定不会C.仍可能会
二、填空题
1.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为____次;当使用监视哨时,若查找失败,则比较关键字的次数为____。
2.在顺序表(8,11,15,19,25,26,30,33,42,48,50)中,用二分(折半)法查找关键码值20,需做的关键码比较次数为____.
3.一个无序序列可以通过构造一棵____树而变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。
4.哈希表是通过将查找码按选定的____和____,把结点按查找码转换为地址进行存储的线性表。
哈希方法的关键是___和____。
一个好的哈希函数其转换地址应尽可能____,而且函数运算应尽可能____。
5.平衡二叉树又称__________,其定义是__________。
6.在哈希函数H(key)=key%p中,p值最好取__________。
7.假定有k个关键字互为同义词,若用线性探测再散列法把这k个关键字存入散列表中,至少要进行__________次探测。
8.__________法构造的哈希函数肯定不会发生冲突。
9.动态查找表和静态查找表的重要区别在于前者包含有__________和__________运算,而后者不包含这两种运算。
10.在散列存储中,装填因子α的值越大,则____;α的值越小,则____。
11.已知N元整型数组a存放N个学生的成绩,已按由大到小排序,以下算法是用对分(折半)查找方法统计成绩大于或等于X分的学生人数,请填空使之完善。
#defineN/*学生人数*/
intuprx(inta[N],intx)/*函数返回大于等于X分的学生人数*/
{inthead=1,mid,rear=N;
do{mid=(head+rear)/2;
if(x<=a[mid])__
(1)__else__
(2)__;
}while(__(3)__);
if(a[head]returnhead;}
三、应用题
1.HASH方法的平均查找路长决定于什么?
是否与结点个数N有关?
处理冲突的方法主要有哪些?
2.设有一组关键字{9,01,23,14,55,20,84,27},采用哈希函数:
H(key)=keymod7,表长为10,用开放地址法的二次探测再散列方法Hi=(H(key)+di)mod10(di=12,22,32,…,)解决冲突。
要求:
对该关键字序列构造哈希表,并计算查找成功的平均查找长度。
3.选取哈希函数H(key)=keymod7,用链地址法解决冲突。
试在0-6的散列地址空间内对关键字序列{31,23,17,27,19,11,13,91,61,41}构造哈希表,并计算在等概率下成功查找的平均查找长度。
4.输入一个正整数序列(53,17,12,66,58,70,87,25,56,60),试完成下列各题。
(1)按次序构造一棵二叉排序树BS。
(2)依此二叉排序树,如何得到一个从大到小的有序序列?
(3)画出在此二叉排序树中删除“66”后的树结构。
5.直接在二叉排序树中查找关键字K与在中序遍历输出的有序序列中查找关键字K,其效率是否相同?
输入关键字有序序列来构造一棵二叉排序树,然后对此树进行查找,其效率如何?
为什么?
习题图
一、单项选择题
1.设有无向图G=(V,E)和G’=(V’,E’),如G’为G的生成树,则下面不正确的说法是()
A.G’为G的子图B.G’为G的连通分量
C.G’为G的极小连通子图且V’=VD.G’是G的无环子图
2.任何一个带权的无向连通图的最小生成树()
A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在
3.以下说法正确的是()
A.连通分量是无向图中的极小连通子图。
B.强连通分量是有向图中的极大强连通子图。
C.在一个有向图的拓扑序列中,若顶点a在顶点b之前,则图中必有一条弧。
D.对有向图G,如果从任意顶点出发进行一次深度优先或广度优先搜索能访问到每个顶点,则该图一定是完全图。
4.图中有关路径的定义是()。
A.由顶点和相邻顶点序偶构成的边所形成的序列B.由不同顶点所形成的序列
C.由不同边所形成的序列D.上述定义都不是
5.设无向图的顶点个数为n,则该图最多有()条边。
A.n-1B.n(n-1)/2C.n(n+1)/2D.0E.n2
6.要连通具有n个顶点的有向图,至少需要()条边。
A.n-lB.nC.n+lD.2n
7.在一个无向图中,所有顶点的度数之和等于所有边数()倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的()倍。
A.1/2B.2C.1D.4
8.下列哪一种图的邻接矩阵是对称矩阵?
()
A.有向图B.无向图C.AOV网D.AOE网
9.下列说法不正确的是()。
A.图的遍历是从给定的源点出发每一个顶点仅被访问一次
B.遍历的基本算法有两种:
深度遍历和广度遍历
C.图的深度遍历不适用于有向图
D.图的深度遍历是一个递归过程
10.下面哪一方法可以判断出一个有向图是否有环(回路):
A.深度优先遍历B.拓扑排序C.求最短路径D.求关键路径
11.在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为()。
A.O(n)B.O(n+e)C.O(n2)D.O(n3)
12.已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7},
E={,,,,,,,,},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7
C.V1,V3,V4,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V7
13.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是()。
A.G中有弧B.G中有一条从Vi到Vj的路径
C.G中没有弧D.G中有一条从Vj到Vi的路径
14.关键路径是事件结点网络中()。
A.从源点到汇点的最长路径B.从源点到汇点的最短路径
C.最长回路D.最短回路
15.下列关于AOE网的叙述中,不正确的是()。
A.关键活动不按期完成就会影响整个工程的完成时间
B.任何一个关键活动提前完成,那么整个工程将会提前完成
C.所有的关键活动提前完成,那么整个工程将会提前完成
D.某些关键活动提前完成,那么整个工程将会提前完成
二、填空题
1.具有10个顶点的无向图,边的总数最多为______。
2.设无向图G有n个顶点和e条边,每个顶点Vi的度为di(1<=i<=n),则e=______
3.在有n个顶点的有向图中,若要使任意两点间可以互相到达,则至少需要______条弧。
4.下图中的强连通分量的个数为______个。
5.N个顶点的连通图用邻接矩阵表示时,该矩阵至少有_______个非零元素。
6.在有向图的邻接矩阵表示中,计算第I个顶点入度的方法是______。
7.对于一个具有n个顶点e条边的无向图的邻接表的表示,则表头向量大小为______,邻接表的边结点个数为______。
8.已知一无向图G=(V,E),其中V={a,b,c,d,e}E={(a,b),(a,d),(a,c),(d,c),(b,e)}现用某一种图遍历方法从顶点a开始遍历图,得到的序列为abecd,则采用的是______遍历方法。
9.构造连通网最小生成树的两个典型算法是______。
10.有向图G可拓扑排序的判别条件是______。
11.Di