文档库 最新最全的文档下载
当前位置:文档库 › 数据结构第八章

数据结构第八章

数据结构第八章
数据结构第八章

第八章排序

8.1 基本概念

排序在数据处理中经常遇到,也是一种重要的运算。排序的方法很多,主要原则是时间复杂度和空间复杂度最低。

关键字:对象是由记录组成的文件,而记录是由若干个数据项(域)组成,其中有一项或多项可用来标识一个记录称关键字。

排序:整理文件记录,使它们按关键字递增或递减的次序排列。

R1,R2,……,Rn==>Ri1,Ri2,……,Rin

内部排序:整个文件都在内存中处理,不涉及内外存交换,称为内部排序。

外部排序:排序过程中涉及到内外存交换,不能一次完成,称为外部排序。

排序分类:插入排序、交换排序、选择排序、归并排序、分配排序等等。

稳定性:在排序过程中,关键字相同的记录相对位置不发生改变叫稳定的排序方法,否则称为不稳定的排序方法。

存储结构:1.数组

2.链表

3.索引表

假设:我们所处理的对象是R[n]。

定义:typedef struct

{ int key;

datatype other;

}rectype;

rectype R[n];

8.2 插入排序

1.直接插入排序

基本思想:R[1],R[2],……,R[i],……,R[n]

假设排序过程中的某一时刻,R被划分成两个子区,R[1]……R[i-1]已经有序,R[i]……R[n]为无序区。那么用R[i]和前面的R[1]……R[i-1]进行比较,将R[i]插入到适当的位置。初始令i=1,从R[2]开始直至R[n]。在插入过程中有序区的记录将后移。

例图:

算法:

void INSERTSORT(rectype R[])

{ int i,j;

for(i=2;i

{

R[0]=R[i];

j=i-1;

while(R[0].key

R[j+1]=R[j--];

R[j+1]=R[0];

}

}

监视哨:哨兵R[0]

1)保存了R[i],还可做中间变量。

2)保证循环结束(最后比较R[0].key

算法分析:1)正序(最好):Cmin=n-1次,无需后移记录

Mmin=2(n-1)次移动

2)反序(最坏):Cmax=∑i=(n+2)(n-1)/2=O(n2) (i=2…n)

Mmax=∑(i-1+2)=(n-1)(n+4)/2=O(n2) (i=2…n)

3)直接插入排序方法是稳定的排序方法。

2.希尔排序(缩小增量排序)

基本思想:取d1

例图:

算法:

rectype R[n+d1];

int d[t];

void SHEELSORT(rectype R[],int d[])

{ int i,j,k,h;

rectype temp;

int maxint=∞;

for(i=0;i

R[i].key=-maxint;

k=0

do

{ h=d[k];

for(i=h+d1;i

{ temp=R[i];

j=i-h;

while(temp.key

{ R[j+h]=R[j];

j=j-h;

}

R[j+h]=temp;

}

k++;

}while(h!=1)

}

哨兵位置:R[1-h] R[2-h] … R[0] R[1] … R[n]

↓↓

R[0] R[1] … R[h-1] R[h] … R[n] … R[n+d1] 为避免计算R[i]属于哪一组的哪个监视哨,将R[i]保存到一辅助记录temp当中,且按最大增量d1来设置监视哨。

算法分析:1)希尔排序的增量取值问题至今没有得到解决,即如何取值排序效率最高。

2)希尔排序Cave≈n1.3 Mave≈n1.3

显然优于T(n)=O(n2)

3)直接插入排序方法稳定。

希尔排序方法不稳定(多次分组)。

此外还可采用第二关键字排序。

8.3 交换排序

1.起泡排序

基本思想:设想R[0]R[1]……R[n]垂直竖立,将R[i]看成是重量为R[i].key 的气泡,从上到下或自下至上,两两比较,重者下沉,轻者上浮。

例图:

算法:共n-1趟排序,第j趟比较n-j次。

如发现在某趟排序过程中没有记录交换,说明记录R[1]……R[n]已有序,可提前结束循环,可引入一布尔变量noswap以示区别。

void BUBBLESORT(rectype R[])

{ int i,j,noswap;

rectype temp;

for(i=0;i

{ noswap=true;

for(j=n-2;j>=i;j--)

if (R[j+1].key

{ temp=R[j+1];

R[j+1]=R[j];

R[j]=temp;

noswap=false;

}

if (noswap) break;

}

}

算法分析:1)Cmax=∑(n-i)=n(n-1)/2=O(n2) (i=1…n-1)

2)Mmax=∑3(n-i)=3n(n-1)/2=O(n2) (i=2…n)

算法改进:1)在每趟扫描中,记住最后一次交换发生的位置K,因为该位置之前的记录都已排序,所以下次扫描可以终止于K,而不必进行到预定的下界i. 2)可在排序过程中交替改变扫描方向(即一次从下到上,另一次则从上到下)。以改善某种不对称性,排序速度也会加快。

2.快速排序

基本思想:在当前无序区R[l]到R[h]中任取一记录作为比较基准(temp),以此划分出左右两个无序子区R[l]……R[i-1]和R[i+1]……R[h]且:

R[1]……R[i-1]的关键字≤temp.key≤R[i+1]……R[h]关键字当左右区间R[1]……R[i-1]和R[i+1]……R[h]均非空时,重复上述划分,直至记录排好。

换句话说,对每个记录进行递归定位。初始令temp=R[i],i=l,j=h。j从右向左扫描,试图找到一个小的调到左边去。i从左向右扫描试图找到一个大的调到右边去。当i,j相遇时即是temp的位置。

例图:

一次划分:

int PARTITION(rectype R[],int l,int h)

{

int i,j;

rectype temp;

i=l;j=h;temp=R[i];

while(i!=j)

{

while((R[j].key>=temp.key)&&(i

j--;

if (i

while((R[i].key<=temp.key)&&(i

i++;

if (i

}

R[i]=temp;

return i;

}

算法:调用QUICKSORT(R,0,n-1)

void QUICKSORT(rectype R[],int s1,int t1)

{ int i;

if (s1

{ i=PARTITION(R,s1,t1);

QUICKSORT(R,s1,i-1);

QUICKSORT(R,i+1,t1);

}

}

算法分析:Cmax=∑(n-i)=n(n-1)/2=O(n2) (i=1…n-1)

n)

Cgood=O(nlog

2

n)

T(n)ave=O(nlog

2

它是基于比较的内部排序方法中速度最快的,也因此而得名。

Smin=O(log

n)

2

Smax=O(n)

此排序方法不稳定,请检验2,2,1。

算法改进:可采用三者取中规则,即取R[1].key,R[h].key和R[(1+h)/2].key 中取中值的记录与R[1]交换之,以改善速度。

问题思考:如何将快速排序递归算法改写为非递归算法?

1)利用栈来实现?

2)利用队列来实现?

3)额外开辟数组空间来实现?

8.4 选择排序

1.直接选择排序

基本思想:首先从R[0]……R[n-1]中选择最小记录放入R[0]中,

然后从R[1]……R[n-1]中选择最小记录放入R[1]中,

以此类推,与通常想法一致。

例图:

算法:n个记录----n-1趟排序

第i趟------n-i次比较

void SELECTSORT(rectype R[])

{ int i,j,k;

rectype temp;

for(i=0;i

{ k=i;

for(j=i+1;j

if (R[j].key

if (k!=i)

{ temp=R[i];

R[i]=R[k];

R[k]=temp;

}

}

}

算法分析:C=∑(n-i)=n(n-1)/2=O(n2) (i=1…n-1)

Mmax=3(n-1)

T(n)=O(n2)

直接选择排序不稳定,试检验2,2,1

2.堆排序

直接选择排序中,从R[1]……R[n]进行了n-1次比较得到了R[1],从R[2]……R[n]中要进行n-2次比较。事实上,后n-2次比较有许多可能在n-1次比较中做过,但没保留这些结果,堆排序克服了这一缺点。

堆排序:是树形择排序,将R[1]……R[n]看成是一颗完全二叉树的顺序存储结构,按照双亲和孩子的结点之间的关系,选择关键字最小记录。

堆(heap):n个关键字k1,k2,……,kn称为小根堆,当仅仅当:

ki≤k2i ki≤k2i+1 (1≤i≤n/2)

也即,树中任一非叶结点的关键字≤它的孩子结点。

反之称为大根堆。

堆中任一棵子树亦是堆。

例图:

基本操作:将当前无序区调整为一个大根堆,取最大的堆顶和无序区的最后一个记录交换,恰好和直接选择相反,有序区在尾部形成并扩大到整个记录区的。建堆步骤:只需将序号n/2,n/2-1……1的结点作根的子树都调整为堆即可。 for(i=n/2;i>=1;i--)//从第一个倒数非叶子结点开始

SIFT(R,i,n);

例图:

筛选算法:

void SIFT(rectype R[])

{ int i,m;

rectype temp;

temp=R[i];

j=2*i;

while(i<=m)

{

if ((j

if (temp.key

{ R[i]=R[j];

i=j;

j=2*i;

}

else break;

}

R[i]=temp;

}

堆算法:

void HEAPSORT(rectype R[])

{ int i;

rectype temp;

for(i=n/2;i>=1;i--)

SIFT(R,i,n);

for(i=n;i>=1;i--)

{ temp=R[1];

R[1]=R[i];

R[i]=temp;

SIFT(R,1,i-1);

}

}

n)

算法分析:T(n)=O(nlog

2

辅助空间仅用于交换记录。

堆排序是不稳定。

8.5 归并排序

所谓归并:是将若干个已排序的子文件合并成一个有序文件。

简单归并:将两个有序子文件合并成一个有序文件:

R[low]……R[m]和R[m+1]……R[high]合并成R[low]……R[high],设三个指针i,j,k,依次比较R[i],R[j]的关键字,取较小的记录复制到R1[k]中。

算法:

void MERGE(rectype R[],rectype R1[],int low,int mid,int high)

{ int i,j,k;

i=low;j=mid+1;k=low;

while((i<=mid)&&(j<=high))

if (R[i].key<=R[j].key)

R1[k++]=R[i++];

else

R1[k++]=R[j++];

while(i<=mid) R1[k++]=R[i++];

while(j<=high) R1[k++]=R[j++];

}

二路归并:将R[0]……R[n-1]看成n个长度为1的子文件,两两归并,再将n/2个文件两两归并,直到得到一个长度为n的文件。

例图:

一趟归并:设各子文件的长度<=length,则有n/length个子文件。

R[0]……R[length-1],R[length]……R[2length-1]……

算法:

void MERGEPASS(revtype R[],rectypeR1[],int lengh)

{ int i=0,j;

while(i+2*length-1

{ MERGE(R,R1,i,i+length-1,i+2*length-1);

i=i+2*length;

}

if (i+length-1

for(j=i;j

}

二路归并:

void MERGESORT(rectype R[])

{ int length=1;

while(length

{ MERGEPASS(R,R1,lengh);

length=2*length;

MERGEPASS(R1,R,lengh)

lngth=2*length;

}

}

特殊情况:1.子文件个数可能为奇数。

2.最后一个子文件长度可能

3.两次调用MERGEPASS使R→R1,R1→R,方可再归并。

4二次调用没判length>=n,恰好结果在R中。

算法分析:T(n)=O(nlog

n)

2

S(n)=O(n) //R1的空间开销

二路归并算法是稳定的。

8.6 分配排序

1.箱排序(BinSort)——桶排序(BucketSort)

基本思想:设置若干个箱子依次扫描记录R[1]……R[n]将关键字等于K的记录全部装入到第K个箱子里,然后将它们按序号将箱子首尾连接起来,通过分配和收集的办法实现排序,只适于关键字取值范围较小的情况,个数取决于key的取值范围。

例如:扑克牌A,2……10,J,Q,K排序需设置13个箱子,依次将每张牌投入相应的箱子,然后收集起来即可。

2.基数排序:(Radix Sort)是箱排序的改进和推广,箱排序只适于key取值范围较小的情况,否则,所需箱子数m以及清箱和链接箱子时间均太多,若m=n2则T(n)=O(n2+n)=O(n2).

基本思想:设key是由d个分量Ki1ki2……ki d组成,且每个分量取值范围相同C1<=ki j<=Crd(1<=j<=d),rd称为基数。首先对Ki d进行箱排序,然后排Ki d-1…,最后排Ki1。在d趟箱排序中,需设置的箱子个数就是基数rd。

例图:

算法:

算法分析:1)没有关键字的比较和记录移动,排序时间主要耗费在修改指针上。

2)T(n)=O(d*(rd+n))=O(n),S(n)=O(n+rd)。

3)当n较大,d较小时适用。

4)基数排序是稳定的。

8.7 排序方法的比较和选择

选择排序方法需考虑的因素:

1)记录数目。

2)记录信息量大小。

3)关键字结构及分布情况。

4)排序稳定性的要求。

5)语言工具条件,辅助空间大小等。

选择方法:1)若n较小,可采用直接插入或直接选择排序。

2)若文件初态已基本有序,则直接插入或起泡排序为宜。

3)若n较大,应采用T(n)=O(nlogn)的排序方法,如快速、堆、归并较好。

4)若n很大,且关键字位数较少并可分解时,基数排序较好。

5)当记录本身信息量很大时,采用链表存储结构较好。

8.8 外部排序简介

外部排序的实现,主要依靠数据的内外存交换和内部归并。首先把记录R1,R2,……,Rn分成若干长度为t的段。t应足够大,但不能超内存空间,其次利用上述的内部排序方法,对每段的t个记录进行内部排序,这些经过排序的段称为顺串(Run),然后对这些顺串进行归并,使顺串长度逐渐增大,直至一个顺串为止。

最简单的方法类似于二路归并。

在外部排序过程中,数据的内外存交换所耗费的时间,比记录的内部归并所

耗时间大得多,因此提高外部排序效率的途径在于减少内外存交换的次数,即减少归并的趟数。

数据结构课后习题与解析第六章

第六章习题 1.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。2.对题1所得各种形态的二叉树,分别写出前序、中序和后序遍历的序列。 3.已知一棵度为k的树中有n 1个度为1的结点,n 2 个度为2的结点,……,n k 个度为k的结点, 则该树中有多少个叶子结点并证明之。 4.假设一棵二叉树的先序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK,请画出该二叉树。 5.已知二叉树有50个叶子结点,则该二叉树的总结点数至少应有多少个? 6.给出满足下列条件的所有二叉树: ①前序和后序相同 ②中序和后序相同 ③前序和后序相同 7. n个结点的K叉树,若用具有k个child域的等长链结点存储树的一个结点,则空的Child 域有多少个? 8.画出与下列已知序列对应的树T: 树的先根次序访问序列为GFKDAIEBCHJ; 树的后根次序访问序列为DIAEKFCJHBG。 9.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为: 0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10 请为这8个字母设计哈夫曼编码。 10.已知二叉树采用二叉链表存放,要求返回二叉树T的后序序列中的第一个结点指针,是否可不用递归且不用栈来完成?请简述原因. 11. 画出和下列树对应的二叉树:

12.已知二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。 13.编写递归算法:对于二叉树中每一个元素值为x的结点,删去以它为根的子树,并释放相应的空间。 14.分别写函数完成:在先序线索二叉树T中,查找给定结点*p在先序序列中的后继。在后序线索二叉树T中,查找给定结点*p在后序序列中的前驱。 15.分别写出算法,实现在中序线索二叉树中查找给定结点*p在中序序列中的前驱与后继。 16.编写算法,对一棵以孩子-兄弟链表表示的树统计其叶子的个数。 17.对以孩子-兄弟链表表示的树编写计算树的深度的算法。 18.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出后序遍历非递归的算法。 19.设二叉树按二叉链表存放,写算法判别一棵二叉树是否是一棵正则二叉树。正则二叉树是指:在二叉树中不存在子树个数为1的结点。 20.计算二叉树最大宽度的算法。二叉树的最大宽度是指:二叉树所有层中结点个数的最大值。 21.已知二叉树按照二叉链表方式存储,利用栈的基本操作写出先序遍历非递归形式的算法。 22. 证明:给定一棵二叉树的前序序列与中序序列,可唯一确定这棵二叉树; 给定一棵二叉树的后序序列与中序序列,可唯一确定这棵二叉树; 23. 二叉树按照二叉链表方式存储,编写算法,计算二叉树中叶子结点的数目。 24. 二叉树按照二叉链表方式存储,编写算法,将二叉树左右子树进行交换。 实习题 1.[问题描述] 建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序和后序), 打印输出遍历结果。

《数据结构》习题汇编07 第七章 图 试题

第七章图试题 一、单项选择题 1.在无向图中定义顶点的度为与它相关联的()的数目。 A. 顶点 B. 边 C. 权 D. 权值 2.在无向图中定义顶点 v i与v j之间的路径为从v i到达v j的一个()。 A. 顶点序列 B. 边序列 C. 权值总和 D. 边的条数 3.图的简单路径是指()不重复的路径。 A. 权值 B. 顶点 C. 边 D. 边与顶点均 4.设无向图的顶点个数为n,则该图最多有()条边。 A. n-1 B. n(n-1)/2 C. n(n+1)/2 D. n(n-1) 5.n个顶点的连通图至少有()条边。 A. n-1 B. n C. n+1 D. 0 6.在一个无向图中,所有顶点的度数之和等于所有边数的 ( ) 倍。 A. 3 B. 2 C. 1 D. 1/2 7.若采用邻接矩阵法存储一个n个顶点的无向图,则该邻接矩阵是一个 ( )。 A. 上三角矩阵 B. 稀疏矩阵 C. 对角矩阵 D. 对称矩阵 8.图的深度优先搜索类似于树的()次序遍历。 A. 先根 B. 中根 C. 后根 D. 层次 9.图的广度优先搜索类似于树的()次序遍历。 A. 先根 B. 中根 C. 后根 D. 层次 10.在用Kruskal算法求解带权连通图的最小(代价)生成树时,通常采用一个()辅助结构, 判断一条边的两个端点是否在同一个连通分量上。 A. 位向量 B. 堆 C. 并查集 D. 生成树顶点集合 11.在用Kruskal算法求解带权连通图的最小(代价)生成树时,选择权值最小的边的原则是该边不能 在图中构成()。 A. 重边 B. 有向环 C. 回路 D. 权值重复的边 12.在用Dijkstra算法求解带权有向图的最短路径问题时,要求图中每条边所带的权值必须是 ()。 A. 非零 B. 非整 C. 非负 D. 非正 13.在一个连通图中进行深度优先搜索得到一棵深度优先生成树,树根结点是关节点的充要条件是它至少 有()子女。

(完整word版)数据结构 第八章排序

第八章排序:习题 习题 一、选择题 1.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是( )。 A.希尔排序 B.冒泡排序 C.插入排序 D.选择排序 2.设有1000个无序的记录,希望用最快的速度挑选出其中前10个最大的记录,最好选用( )排序法。 A.冒泡排序 B.快速排序 C.堆排序 D.基数排序 3.在待排序的记录序列基本有序的前提下,效率最高的排序方法是( )。 A.插入排序 B.选择排序 C.快速排序 D.归并排序’ 4.不稳定的排序方法是指在排序中,关键字值相等的不同记录的前后相对位置( )。 A.保持不变 B.保持相反 C.不定 D.无关 5.内部排序是指在排序的整个过程中,全部数据都在计算机的( )中完成的排序。 A. 内存储器 B.外存储器 C.内存储器和外存储器 D.寄存器 6.用冒泡排序的方法对n个数据进行排序,第一趟共比较( )对记录。 A.1 B.2 C.n-l D.n 7.直接插入排序的方法是从第( )个记录开始,插入前边适当位置的排序方法。 A.1 B.2 C.3 D.n 8.用堆排序的方法对n个数据进行排序,首先将n个记录分成( )组。 A.1 B.2 C.n-l D.n 9.归并排序的方法对n个数据进行排序,首先将n个记录分成( )组,两两归并。 A.1 B.2 C.n-l D.n 10.直接插入排序的方法要求被排序的数据( )存储。 A.必须是顺序 B.必须是链表 C.顺序或链表 D.二叉树 11.冒泡排序的方法要求被排序的数据( )存储。 A.必须是顺序 B.必须是链表 C.顺序或链表 D.二叉树 12.快速排序的方法要求被排序的数据( )存储。 A.必须是顺序 B.必须是链表 C.顺序或链表 D.二叉树 13.排序方法中,从未排序序列中依次取出记录与已排序序列(初始时为空)中的记录进行比较,将其放入已排序序列的正确位置上的方法,称为( )。 A.希尔排序 B.冒泡排序 C.插入排序 D.选择排序 14.每次把待排序的记录划分为左、右两个子序列,其中左序列中记录的关键字均小于等于基准记录的关键字,右序列中记录的关键字均大于基准记录的关键字,则此排序方法叫做( )。 A.堆排序 B.快速排序 C.冒泡排序 D. Shell排序 15.排序方法中,从未排序序列中挑选记录,并将其依次放入已排序序列(初始时为空)的一端的方法,称为( )。 A.希尔排序 B.归并排序 C.插入排序 D.选择排序 16.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,记录序列的变化情况如下: (1) (25,84,21,47,15,27,68,35,40) (2) (20,15,21,25,47,27,68,35,84)

数据结构第7章图习题

、单项选择题 1.在一个无向图 G 中,所有顶点的度数之和等于所有边数之和的 _________ 倍 A .l/2 B .1 D .4 2.在一个有向图中, 所有顶点的入度之和等于所有顶点的出度之和的 ________倍 A .l/2 C .2 D .4 3.一个具有 n 个顶点的无向图最多包含 _____ 条边。 A .n B .n +1 C .n-1 D .n(n-1)/2 4.一个具有 n 个顶点的无向完全图包含 _____ 条边。 A .n(n-l) B .n(n+l) C .n(n-l)/2 D .n(n-l)/2 5.一个具有 n 个顶点的有向完全图包含 _____ 条边。 A .n(n-1) B .n(n+l) C .n(n-l)/2 D .n(n+l)/2 6.对于具有 n 个顶点的图,若采用邻接矩阵表示,则该矩阵的大小为 A. n B. n>

点邻接表中的结点总数为_________ 。

B. e C. 2n D. 2e 10.在有向图的邻接表中,每个顶点邻接表链接着该顶点所有邻接点。 A .入边B.出边 C.入边和出边 D .不是入边也不是出边 11.在有向图的逆邻接表中,每个顶点邻接表链接着该顶点所有邻接点。 A .入边B.出边 C.入边和出边 D .不是人边也不是出边 12.如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则 该图一定是 A .完全图B.连通图 C.有回路 D .一棵树 13.采用邻接表存储的图的深度优先遍历算法类似于二叉树的算法。 A .先序遍历B.中序遍历 C.后序遍历 D .按层遍历 14.采用邻接表存储的图的广度优先遍历算法类似于二叉树的算法。 A .先序遍历B.中序遍历 C.后序遍历 D .按层遍历 15.如果无向图G必须进行二次广度优先搜索才能访问其所有顶点,则下列说 法中不正确的是 A. G肯疋不是元全图 B. G 一定不是连通图 C. G中一定有回路 D . G有二个连通分量 16. 下列有关图遍历的说法不正确的是 A .连通图的深度优先搜索是一个递归过程 B. 图的广度优先搜索中邻接点的寻找具有先进先出”的特征 C.非连通图不能用深度优先搜索法 D. 图的遍历要求每一顶点仅被访问一次 17. 下列说法中不正确的是

数据结构第六章习题课

1、下图所示的4棵二叉树中,不是完全二叉树的是() 2、二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法()。 A 、正确 B 、错误 C 、不一定 3、已知某二叉树的后序遍历序列是dabec ,中序遍历序列是debac ,它的前序遍历序列是()。 A 、acbed B 、decab C 、deabc D 、cedba 4、如果T2是由有序树T 转换而来的二叉树,那么T 中结点的后序就是T2中结点的()。 A 、前序 B 、中序 C 、后序 D 、层次序 5、深度为5的二叉树至多有()个结点。 A 、16 B 、32 C 、31 D 、10 6、在一个非空二叉树的中序遍历序列中,根结点的右边()。 A 、只有右子树上的所有结点 B 、只有右子树上的部分结点 C 、只有左子树上的部分结点 D 、只有左子树上的所有结点 7、树最适合用来表示()。 A 、有序数据元素 B 、无序数据元素 C 、元素之间具有分支层次关系的数据 D 、元素之间无联系的数据。 8、任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序()。 A 、不发生改变 B 、发生改变 C 、不能确定 D 、以上都不对 9、实现任意二叉树的后序遍历的非递归算法而不使用栈结构,最佳方案是二叉树采用()存储结构。 A 、二叉链表 B 、广义表存储结构 C 、三叉链表 D 、顺序存储结构 10、对一个满二叉树,m 个树叶,n 个结点,深度为h ,则()。 A 、n=m+h B 、h+m=2n C 、m=h-1 D 、n=2h -1 11、设n ,m 为二叉树上的两个结点,在中序遍历时,n 在m 前的条件是()。 A 、n 在m 右方 B 、n 是m 祖先 C 、n 在m 左方 D 、n 是m 子孙 12.已知一算术表达式的中缀形式为 A+B*C-D/E ,后缀形式为ABC*+DE/- , A B C D

数据结构第7章

数据结构第7章-图习题

第7章图 一、单项选择题 1.在一个无向图G中,所有顶点的度数之和等于所有边数之和的______倍。 A.l/2 B.1 C.2 D.4 2.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的______倍。 A.l/2 B.1 C.2 D.4 3.一个具有n个顶点的无向图最多包含______条边。 A.n B.n+1 C.n-1 D.n(n-1)/2 4.一个具有n个顶点的无向完全图包含______条边。 A.n(n-l) B.n(n+l) C.n(n-l)/2 D.n(n-l)/2 5.一个具有n个顶点的有向完全图包含______条边。 A.n(n-1) B.n(n+l) C.n(n-l)/2 D.n(n+l)/2 6.对于具有n个顶点的图,若采用邻接矩阵表示,则该矩阵的大小为______。 A.n B.n×n C.n-1 D.(n-l) ×(n-l) 7.无向图的邻接矩阵是一个______。 A.对称矩阵B.零矩阵

C.上三角矩阵D.对角矩阵 8.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则表头向量的大小为______。 A.n B.e C.2n D.2e 9.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则所有顶点邻接表中的结点总数为______。 A.n B.e C.2n D.2e 10.在有向图的邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。 A.入边B.出边 C.入边和出边D.不是入边也不是出边 11.在有向图的逆邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。 A.入边B.出边 C.入边和出边D.不是人边也不是出边 12.如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是______。 A.完全图B.连通图 C.有回路D.一棵树 13.采用邻接表存储的图的深度优先遍历算法类似于二叉树的______算法。 A.先序遍历B.中序遍历 C.后序遍历 D.按层遍历

数据结构-第六章-图-练习题及答案详细解析(精华版)

图 1. 填空题 ⑴ 设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵ 任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶ 图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷ 已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸ 已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹ 有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度

⑺ 图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻ 对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼ 如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽ 在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk 【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。 2. 选择题 ⑴ 在一个无向图中,所有顶点的度数之和等于所有边数的()倍。 A 1/2 B 1 C 2 D 4 【解答】C 【分析】设无向图中含有n个顶点e条边,则。

数据结构第七章图

数据结构习题(图) 一、选择题 1.设完全无向图的顶点个数为n,则该图有( B )条边。 A. n-l B. n(n-l)/2 C.n(n+l)/2 D. n(n-l) 2.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。 A.3 B.2 C.1 D.1/2 3.有向图的一个顶点的度为该顶点的( )。 A.入度 B. 出度 C.入度与出度之和 D.(入度+出度)/2 4.在无向图G (V,E)中,如果图中任意两个顶点vi、vj (vi、vj∈V,vi≠vj)都的,则称该图是( )。 A.强连通图 B.连通图 C.非连通图 D.非强连通图 5.若采用邻接矩阵存储具有n个顶点的一个无向图,则该邻接矩阵是一个( )。 A.上三角矩阵 B.稀疏矩阵 C.对角矩阵 D.对称矩阵 6.若采用邻接矩阵存储具有n个顶点的一个有向图,顶点vi的出度等于邻接矩阵 A.第i列元素之和 B.第i行元素之和减去第i列元素之和 C.第i行元素之和 D.第i行元素之和加上第i列元素之和 7.对于具有e条边的无向图,它的邻接表中有( )个边结点。 A.e-l B.e C.2(e-l) D. 2e 8.对于含有n个顶点和e条边的无向连通图,利用普里姆Prim算法产生最小生成时间复杂性为( ),利用克鲁斯卡尔Kruskal算法产生最小生成树(假设边已经按权的次序排序),其时间复杂性为( )。 A. O(n2) B. O(n*e) C. O(n*logn) D.O(e) 9.对于一个具有n个顶点和e条边的有向图,拓扑排序总的时间花费为O( ) A.n B.n+l C.n-l D.n+e 10.在一个带权连通图G中,权值最小的边一定包含在G的( )生成树中。 A.最小 B.任何 C.广度优先 D.深度优先 二、填空题 1.在一个具有n个顶点的无向完全图中,包含有____条边;在一个具有n个有向完全图中,包含有____条边。 2.对于无向图,顶点vi的度等于其邻接矩阵____ 的元素之和。 3.对于一个具有n个顶点和e条边的无向图,在其邻接表中,含有____个边对于一个具有n个顶点和e条边的有向图,在其邻接表中,含有_______个弧结点。 4.十字链表是有向图的另一种链式存储结构,实际上是将_______和_______结合起来的一种链表。 5.在构造最小生成树时,克鲁斯卡尔算法是一种按_______的次序选择合适的边来构造最小生成树的方法;普里姆算法是按逐个将_______的方式来构造最小生成树的另一种方法。 6.对用邻接表表示的图进行深度优先遍历时,其时间复杂度为一;对用邻接表表示的图进行广度优先遍历时,其时间复杂度为_______。 7.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数为_______ ,边数为_______。 8.在执行拓扑排序的过程中,当某个顶点的入度为零时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1。为了避免重复检测顶点的入度是否为零,需要设立一个____来存放入度为零的顶点。 三、简答题 l.回答以下问题:

数据结构第八章习题及答案

习题八查找 一、单项选择题 1.顺序查找法适合于存储结构为()的线性表。 A.散列存储 B. 顺序存储或链式存储 C. 压缩存储 D. 索引存储 2.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。 A. (n-1)/2 B. n/2 C. (n+1)/2 D. 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)=key MOD 13,散列地址为1的链中有()个

数据结构第7章-答案

一、单选题 C01、在一个图中,所有顶点的度数之和等于图的边数的倍。 A)1/2 B)1 C)2 D)4 B02、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。 A)1/2 B)1 C)2 D)4 B03、有8个结点的无向图最多有条边。 A)14 B)28 C)56 D)112 C04、有8个结点的无向连通图最少有条边。 A)5 B)6 C)7 D)8 C05、有8个结点的有向完全图有条边。 A)14 B)28 C)56 D)112 B06、用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。 A)栈 B)队列 C)树 D)图 A07、用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。 A)栈 B)队列 C)树 D)图 A08、一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为。 A)O(n) B)O(e) C)O(n+e) D)O(n2) C09、已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是。 A)0 2 4 3 1 5 6 B)0 1 3 6 5 4 2 C)0 1 3 4 2 5 6 D)0 3 6 1 5 4 2 B10、已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按广度优先遍历的结点序列是。 A)0 2 4 3 6 5 1 B)0 1 2 3 4 6 5 C)0 4 2 3 1 5 6 D)0 1 3 4 2 5 6 D11、已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是。 A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3 A12、已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是。

数据结构第六章树和二叉树习题及答案

习题六树和二叉树 一、单项选择题 1.以下说法错误的是() A. 树形结构的特点是一个结点可以有多个直接前趋 B. 线性结构中的一个结点至多只有一个直接后继 C. 树形结构可以表达(组织)更复杂的数据 D. 树(及一切树形结构)是一种”分支层次”结构 E. 任何只含一个结点的集合是一棵树 2. 下列说法中正确的是() A. 任何一棵二叉树中至少有一个结点的度为2 B. 任何一棵二叉树中每个结点的度都为2 C. 任何一棵二叉树中的度肯定等于2 D. 任何一棵二叉树中的度可以小于2 3. 讨论树、森林和二叉树的关系,目的是为了() A. 借助二叉树上的运算方法去实现对树的一些运算 B. 将树、森林按二叉树的存储方式进行存储 C. 将树、森林转换成二叉树 D. 体现一种技巧,没有什么实际意义4.树最适合用来表示() A. 有序数据元素 B .无序数据元素 C.元素之间具有分支层次关系的数据 D .元素之间无联系的数据 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B .11 C .15 D .不确定 6. 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3与森林F 对应的二叉树根结点的右子树上的结点个数是()。 A.M1 B .M1+M2 C .M3 D .M2+M3 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是() A.250 B .500 C .254 D .505 E .以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为() A. 不确定 B . 2n C . 2n+1 D . 2n-1 9.二叉树的第I 层上最多含有结点数为() I I-1 I-1 I A.2I B .2 I-1 -1 C .2 I-1 D .2 I -1 10.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+1 11. 利用二叉链表存储树,则根结点的右指针是()。 A.指向最左孩子 B .指向最右孩子 C .空D .非空 12.已知一棵二叉树的前序遍历结果为为()。 A.CBEFDA B .FEDCBA 13.已知某二叉树的后序遍历序列是()。 ABCDEF中序遍历结果 为 C .CBEDFA D dabec, 中序遍历序列是 CBAEDF则后序遍历的结 果 .不定 debac , 它的前序遍历是

数据结构第7章 图习题

第7章图 一、单项选择题 1.在一个无向图G中,所有顶点的度数之和等于所有边数之和的______倍。 A.l/2 B.1 C.2 D.4 2.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的______倍。 A.l/2 B.1 C.2 D.4 3.一个具有n个顶点的无向图最多包含______条边。 A.n B.n+1 C.n-1 D.n(n-1)/2 4.一个具有n个顶点的无向完全图包含______条边。 A.n(n-l) B.n(n+l) C.n(n-l)/2 D.n(n-l)/2 5.一个具有n个顶点的有向完全图包含______条边。 A.n(n-1) B.n(n+l) C.n(n-l)/2 D.n(n+l)/2 6.对于具有n个顶点的图,若采用邻接矩阵表示,则该矩阵的大小为______。 A.n B.n×n C.n-1 D.(n-l) ×(n-l) 7.无向图的邻接矩阵是一个______。 A.对称矩阵B.零矩阵 C.上三角矩阵D.对角矩阵 8.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则表头向量的大小为______。 A.n B.e C.2n D.2e 9.对于一个具有n个顶点和e条边的无(有)向图,若采用邻接表表示,则所有顶点邻接表中的结点总数为______。

A.n B.e C.2n D.2e 10.在有向图的邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。 A.入边B.出边 C.入边和出边D.不是入边也不是出边 11.在有向图的逆邻接表中,每个顶点邻接表链接着该顶点所有______邻接点。 A.入边B.出边 C.入边和出边D.不是人边也不是出边 12.如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是______。 A.完全图B.连通图 C.有回路D.一棵树 13.采用邻接表存储的图的深度优先遍历算法类似于二叉树的______算法。 A.先序遍历B.中序遍历 C.后序遍历 D.按层遍历 14.采用邻接表存储的图的广度优先遍历算法类似于二叉树的______算法。 A.先序遍历B.中序遍历 C.后序遍历 D.按层遍历 15.如果无向图G必须进行二次广度优先搜索才能访问其所有顶点,则下列说法中不正确的是______。 A.G肯定不是完全图B.G一定不是连通图 C.G中一定有回路D.G有二个连通分量 16.下列有关图遍历的说法不正确的是______。 A.连通图的深度优先搜索是一个递归过程 B.图的广度优先搜索中邻接点的寻找具有“先进先出”的特征 C.非连通图不能用深度优先搜索法 D.图的遍历要求每一顶点仅被访问一次 17.下列说法中不正确的是______。 A.无向图中的极大连通子图称为连通分量

数据结构习题集第章图

第7章图 一、选择题 1.一个有n 个顶点的无向图最多有()条边。 A、n B、n(n-1) C、n(n-1)/2 D、2n 2.具有6 个顶点的无向图至少有()条边才能保证是一个连通图。 A、5 B、6 C、7 D、8 3.具有n 个顶点且每一对不同的顶点之间都有一条边的图被称为()。 A、线性图 B、无向完全图 C、无向图 D、简单图 4.具有4个顶点的无向完全图有()条边。 A、6 B、12 C、16 D、20 5.G是一个非连通无向图,共有28 条边,则该图至少有()个顶点。 A、6 B、7 C、8 D、9 6.存储稀疏图的数据结构常用的是()。 A、邻接矩阵 B、三元组 C、邻接表 D、十字链表 7.对一个具有n个顶点的图,采用邻接矩阵表示则该矩阵的大小为()。 A、n B、(n-1)2 C、(n+1)2 D、n2 8.设连通图G的顶点数为n,则G 的生成树的边数为()。 A、n-1 B、n C、2n D、2n-1 9.对于一个具有N个顶点和E条边的无向图,若采用邻接表表示,则表头向量的大小为((1));所有邻接表 中的结点总数是((2))。 (1)A、N B、N+1 C、N-1 D、N+E (2)A、E/2 B、E C、2E D、N+E 10.对于一个具有n个顶点和e条边的无向图,若采用邻接表表示,则表向量的大小为(),所有顶点邻接表 的结点总数为()。 A、n B、n+1 C、n-1 D、2n E、e/2 F、e G、2e H、n+e 11.在有向图的邻接表存储结构中,顶点v在表结点中出现的次数是()。 A、顶点v 的度 B、顶点v 的出度 C、顶点v 的入度 D、依附于顶点v 的边数 12.已知一个图,若从顶点a出发进行深度和广度优先搜索遍历,则可能得到的顶点序列分别为()和() (1) A、abecdf B、acfebd C、acebfd D、acfdeb (2) A、abcedf B、abcefd C、abedfc D、acfdeb 13.采用邻接表存储的图的深度和广度优先搜索遍历算法类似于二叉树的()和()。 A、中序遍历 B、先序遍历 C、后序遍历 D、层次遍历 14.已知一有向图的邻接表存储结构如下图所示,分别根据图的深度和广度优先搜索遍历算法,从顶点v1出发,

数据结构 第六章 图 练习题及答案详细解析

图 1. 填空题 ⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk

数据结构第七章图练习及答案

1.拓扑排序的结果不是唯一的,试写出下图任意2个不同的拓扑序列。 2.写出求以下AOE网的关键路径的过程。要求:给出每一个事件和每一个活动的最早开 始时间和最晚开始时间。 【解析】解题关键是弄清拓扑排序的步骤 (1)在AOV网中,选一个没有前驱的结点且输出;(2)删除该顶点和以它为尾的弧;(3)重复上述步骤直至全部顶点均输出或不再有无前驱的顶点。 【答案】(1)0132465 (2)0123465 【解析】求关键路径首先求关键活动,关键活动ai的求解过程如下 (1)求事件的最早发生时间ve(j), 最晚发生时间vl(j); (2)最早发生时间从ve(0)开始按拓扑排序向前递推到ve(6), 最晚发生时间从vl(6)按逆拓扑排序向后递推到vl(0); (3)计算e(i),l(i):设ai由弧表示,持续时间记为dut,则有下式成立 e(i)=ve(j) l(i)=vl(k)-dut() (4)找出e(i)-l(i)=0的活动既是关键活动。 【答案】

关键路径为:a0->a4->a6->a9 7.1选择题 1.对于一个具有n个顶点和e条边的有向图,在用邻接表表示图时,拓扑排序算法时间复杂度为(B) A)O(n) B)O(n+e) C)O(n*n) D)O(n*n*n) 2.设无向图的顶点个数为n,则该图最多有(B)条边。 A)n-1 B)n(n-1)/2 C)n(n+1)/2 D)n2 3.连通分量指的是(B) A)无向图中的极小连通子图 B)无向图中的极大连通子图 C)有向图中的极小连通子图 D)有向图中的极大连通子图 4.n个结点的完全有向图含有边的数目(D) A)n*n B)n(n+1) C)n/2 D)n*(n-1) 5.关键路径是(A) A)AOE网中从源点到汇点的最长路径 B)AOE网中从源点到汇点的最短路径 C)AOV网中从源点到汇点的最长路径 D)AOV网中从源点到汇点的最短路径 6.有向图中一个顶点的度是该顶点的(C) A)入度B)出度C)入度与出度之和D)(入度+出度)/2 7.有e条边的无向图,若用邻接表存储,表中有(B)边结点。 A) e B)2e C)e-1 D)2(e-1) 8.实现图的广度优先搜索算法需使用的辅助数据结构为(B)

数据结构第八章习题及答案教学提纲

数据结构第八章习题 及答案

习题八查找 一、单项选择题 1.顺序查找法适合于存储结构为()的线性表。 A.散列存储 B. 顺序存储或链式存储 C. 压缩存储 D. 索引存储 2.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为( )。 A. (n-1)/2 B. n/2 C. (n+1)/2 D. 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)

数据结构第7章作业 图答案

第7章 图 一、单选题 ( C )1. 在一个图中,所有顶点的度数之和等于图的边数的 倍。 A .1/2 B. 1 C. 2 D. 4 ( B )2. 在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的 倍。 A .1/2 B. 1 C. 2 D. 4 ( B )3. 有8个结点的无向图最多有 条边。 A .14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通图最少有 条边。 A .5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全图有 条边。 A .14 B. 28 C. 56 D. 112 ( B )6. 用邻接表表示图进行广度优先遍历时,通常是采用 来实现算法的。 A .栈 B. 队列 C. 树 D. 图 ( A )7. 用邻接表表示图进行深度优先遍历时,通常是采用 来实现算法的。 A .栈 B. 队列 C. 树 D. 图 ( )8. 已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是 ( D )9. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按深度优先遍历的结点序列是 A . 0 2 4 3 1 5 6 B. 0 1 3 5 6 4 2 C. 0 4 2 3 1 6 5 D. 0 1 3 4 2 5 6 ( C )11. 已知图的邻接矩阵同上题8,根据算法,则从顶点0出发,按广度优先遍历的结点序列是 A . 0 2 4 3 1 6 5 B. 0 1 3 5 6 4 2 C. 0 1 2 3 4 6 5 D. 0 1 2 3 4 5 6 ( D )12. 已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是 ( A )13. 已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是 ??? ? ?? ? ? ? ? ? ???????????0100011101100001011010110011001000110010011011110A .0 1 3 2 B. 0 2 3 1 C. 0 3 2 1 D. 0 1 2 3

数据结构第七章图练习及答案

数据结构第七章图练习及答案 1( 拓扑排序的结果不是唯一的,试写出下图任意2个不同的拓扑序列。 2(写出求以下AOE网的关键路径的过程。要求:给出每一个事件和每一个活动的最早开始时间和最晚开始时间。 【解析】解题关键是弄清拓扑排序的步骤 (1)在AOV网中,选一个没有前驱的结点且输出;(2)删除该顶点和以它为尾的弧;(3)重复上述步骤直至全部顶点均输出或不再有无前驱的顶点。 【答案】(1)0132465 (2)0123465 【解析】求关键路径首先求关键活动,关键活动ai的求解过程如下 (1)求事件的最早发生时间ve(j), 最晚发生时间vl(j); (2)最早发生时间从ve(0)开始按拓扑排序向前递推到ve(6), 最晚发生时间从vl(6)按逆拓扑排序向后递推到 vl(0); (3)计算e(i),l(i):设ai由弧表示,持续时间记为dut,则有下式成立 e(i)=ve(j) l(i)=vl(k)-dut()

(4)找出e(i)-l(i)=0的活动既是关键活动。 【答案】 关键路径为:a0->a4->a6->a9 7.1 选择题 1(对于一个具有n个顶点和e条边的有向图,在用邻接表表示图时,拓扑排序算法时间复 杂度为( B ) A) O(n) B) O(n+e) C) O(n*n) D) O(n*n*n) 2(设无向图的顶点个数为n,则该图最多有( B )条边。 A)n-1 B)n(n-1)/2 C) n(n+1)/2 D)n2 3(连通分量指的是( B ) A) 无向图中的极小连通子图 B) 无向图中的极大连通子图 C) 有向图中的极小连通子图 D) 有向图中的极大连通子图 4(n个结点的完全有向图含有边的数目( D ) A)n*n B)n(n+1) C)n/2 D)n*(n-1) 5(关键路径是( A ) A) AOE网中从源点到汇点的最长路径

《数据结构》第八章习题参考答案 (1)

《数据结构》第八章习题参考答案 一、判断题(在正确说法的题后括号中打“√”,错误说法的题后括号中打“×”) 1、用邻接矩阵法存储一个图所需的存储单元数目与图的边数有关。( ×) 2、有e条边的无向图,在邻接表中有e个结点。(×) 3、强连通图的各顶点间均可达。(√) 4、无向图的邻接矩阵一定是对称矩阵,有向图的邻接矩阵一定是非对称矩阵。(×) 5、一个网(带权图)都有唯一的最小生成树。( ×) 6、最小生成树问题是构造连通网的最小代价生成树。( √) 7、关键路径是AOE网中从源点到终点的最长路径。(√) 8、在AOE图中,关键路径上活动的时间延长多少,整个工程的时间也就随之延长多少。(√) 9、n个顶点的完全有向图的边数为n(n-1)。(√) 10、稀疏图的存储结构采用邻接表比较合适。(√) 11、在图G的最小生成树T中,可能会有某条边的权值超过未选边的权值。(√) 二、单项选择题 1.具有4个顶点的无向完全(边数为n*(n-1)/2)图有(A)条边。 A.6 B.12 C.16 D.20 2.下列哪一种图的邻接矩阵是对称矩阵?(B) A.有向图B.无向图C.AOV网D.AOE网 3、在图采用邻接矩阵存储时,求最小生成树的Prim算法的时间复杂度为( C)。 A. O(n) B. O(n+e) C. O(n2) D. O(n3) 4、(1). 求从指定源点到其余各顶点的迪杰斯特拉(Dijkstra)最短路径算法中弧上权不能为负的原因是在实际应用中无意义; (2). 利用Dijkstra求每一对不同顶点之间的最短路径的算法时间是O(n3) ;(图用邻接矩阵表示) (3). Floyd求每对不同顶点对的算法中允许弧上的权为负,但不能有权和为负的回路。 上面不正确的是(A)。 A.(1),(2),(3) B.(1) C.(1),(3) D.(2),(3) 5、下列说法不正确的是( C )。 A.图的遍历是从给定的源点出发每一个顶点仅被访问一次 B.遍历的基本算法有两种:深度遍历和广度遍历 C.图的深度遍历不适用于有向图 D.图的深度遍历是一个递归过程 三、填空题

相关文档
相关文档 最新文档