数据结构后面的复习汇总doc.docx

上传人:b****7 文档编号:26580138 上传时间:2023-06-20 格式:DOCX 页数:20 大小:302.29KB
下载 相关 举报
数据结构后面的复习汇总doc.docx_第1页
第1页 / 共20页
数据结构后面的复习汇总doc.docx_第2页
第2页 / 共20页
数据结构后面的复习汇总doc.docx_第3页
第3页 / 共20页
数据结构后面的复习汇总doc.docx_第4页
第4页 / 共20页
数据结构后面的复习汇总doc.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构后面的复习汇总doc.docx

《数据结构后面的复习汇总doc.docx》由会员分享,可在线阅读,更多相关《数据结构后面的复习汇总doc.docx(20页珍藏版)》请在冰豆网上搜索。

数据结构后面的复习汇总doc.docx

数据结构后面的复习汇总doc

(1)分析并回答下列问题:

1图中顶点的度之和与边数之和的关系?

2有向图中顶点的入度之和与岀度之和的关系?

3具有n个顶点的无向图,至少应有多少条边才能确保是一个连通图?

若采用邻接矩阵表示,则该矩阵的人小是多少?

4具有门个顶点的有向图,至少应有多少条弧才能确保是强连通图的?

为什么?

解:

1边数之和的两倍二顶点的度之和(2e=LD(vi));

2出度之和二入度之和(EOD(vi)=EID(vi));

3至少应该有ml条边,原因:

连通图是任意两顶点都是连通的,又一个图如果多于n・l条边就一定有环,所以其最少就是n・l条边。

该矩阵的大小为n*n,原因:

有n个顶点;

4n条,原因:

在有向图中,如果对于任何两个不相同的点a,b,从a到b和从b到a都存在路径,则称有向图为强连通图,强连通图必须从任何一点出发都可以回到原处,每个节点至少要一条出路。

(最简单的回答,必须要构成环才能满足强连通图,多于ml,就是n)。

E={,,vb,a>,vc,b>,,

⑵设一有向图G=(V,E),其中V={a,b,c,d,e},vcl,e>,ve,a>,,}

1请画出该有向图,并求各顶点的入度和出度。

2

分别画出侑向图的正邻接链表和逆邻接链表。

OD(b)=lID(b)=3OD(c)=2ID(c)=l

OD(e)=3ID(e)=l

 

逆邻接链表

 

⑶对图7-27所示的带权无向图。

①写出相应的邻接矩阵表示。

②求出各顶点的度解:

0

邻接矩阵:

OD

9

6

3

CO

8

9

CO

CO

5

8

CO

6

co

co

2

9

5

3

5

2

CO

CO

7

OD

8

9

00

co

4

CO

CO

5

7

4

CO

图7-27带权无向图

②TD

(1)=3TD

(2)=3TD(3)=4

TD(4)=4TD(5)=3TD(6)=3

⑷已知冇向图的逆邻接链表如图7-28所示。

1画出该有向图。

2写出相应的邻接矩阵表示。

3写出从顶点a开始的深度优先和广度优先遍历序列。

④曲出从顶点3开始的深度优先和广度优先生成树。

解:

①有向图:

②邻接矩阵表示:

0

10

1

00

1

10

1

01

0

11

1

0

0

0

1

0

0

1

0

C

深度优先遍历序列:

VIV4

广度优先遍历序列:

VIV2

V5或VI

V4V2V3V5

 

 

©

 

 

⑸一•个带权连通图的最小牛成树是否唯一?

在什么情况下可能不唯一?

解:

不一定,不唯一的情况:

如果图中同时存在若干个权值相同的边,选择不同的起点,可得到不同的最小生成树,但这些最小生成树边上权值之和为定值。

⑹对于图7-27所示的带权无向图。

1按照Prime算法给岀从顶点2开始构造最小生成树的过程。

2按照Kruskal算法给出最小生成树的过程。

1、普里姆算法的基本思想:

普里姆算法是另一种构造最小生成树的算法,它是按逐个将顶点连通的方式来构造最小生成树的。

图7-27带权无向图

从连通网络N={V,E}中的某一顶点uO出发,选择与它关联的具有最小权值的边(HO,v),将其顶点加入到生成树的顶点集合U中。

以后每一步从一个顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(U,v),把该边加入到生成树的边集TE中,把它的顶点加入到集合U中。

如此重复执行,直到网络中的所有顶点都加入到生成树顶点集合U中为止。

2、Kruskal算法是一种按照连通网中边的权值的递增顺序构造最小生成树的算

法。

Kruskal算法的基本步骤:

假设G=(V,E)是一个具有n个顶点的连通网,T=(U,TE)是G的最小生成树。

令集合U的初值为U=V,即包含有G中全部顶点,集合TE的初值为TE={}o然后,将图G中的边按权值从小到大的顺序依次选取,若选取的边使生成树T不形成回路,则把它并入TE中,保留作为T的一条边;若选取的边使生成树T形成回路,则将其舍弃,如此进行下去,直到TE中包含有ml条边为止,此时的T即为最小生成树。

(7)已知带权有向图如图7-29所示,请利用Dijkstra算法从顶点V4出发到其余顶点的最短路径及长度,给出相应的求解步骤。

图7-29带权有向图

解:

初始化d[i]为无穷大,由于从v4开始,所以将d4=0,标记v4已选择。

下面开始Dijkstra算法:

和v4相连的且未标记的点有v2和v6,这样更新d2=20,d6=15,选择未标记所有点中最小的d6=15,

标记v6已选择,这样我们算出了v4->v6最短距离d6=15;

从v6开始,和v6相连的且未标记的是v2,此时

d6+6=21>20,所以不更新d2,选择未标记所有点中最

小的d2=20,标记v2已选择,这样算出了v4->v2最短距离d2=20;

从v2开始,和v2相连的且未标记的有vl和v5,dl=d2+10=30,d5=d2+30=50,选择未标记所有点中最小的dl=30,标记vl已选择,这样我们算出了v4->vl最短距离dl=30;从vl开始,和vl相连的且未标记的有v3,d3=dl+15=45,选择剩下没被选的所有点的最小的d3=45(d5=50),标记v3已选择,这样我们算出了v4・>v3最短距离d3=45

从v3开始,没有出去的路径,不更新距离,选择剩下没被选的所有点的最小的d5=50,标记v5已选择,这样我们算出了v4->v5最短距离d5=50.

此时所有的点都被访问,结束。

注:

上面的标记点已选择注意下,在算法的实现中用的是将所有的点放入队列中,一旦一个点被选择就是说求出了最短距离,就从此队列删除该点,一直到此队列为空,结束算法,我写标记只是为了方便理解。

希望能帮你清晰了解Dijkstra算法,

图论中很重要的算法之一。

(8)—个AOV网用邻接矩阵表示,如图7-31。

用拓扑排序求该AOV网的一个拓扑序列,出相应的步骤。

对AOV网进行拓扑排序的基本思想是:

(1)从AOV网中选择一个没有前驱的顶点输出它;

(2)从AOV网中删去该顶点,并且删去所有以该顶点为尾的弧;

(3)重复上述两步,直到全部顶点都被输出,或AOV网中不存在没有前驱的顶点。

V0V1V2V3V4V5V6

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

O

OO

O

O

O

O

IV

0

0

1

0

1

1

0丿

 

图7-31—个AOV网的邻接矩阵

⑼拓扑排序的结果不是唯-•的,请给岀如图7-32所示的有向图的所有可能的拓扑序列。

拓扑排序方法如下:

(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它.⑵从网中删去该顶点,并且删去从该顶点发出的全部有向边.

(3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.

(10)假设一个工程的进度计划用AOE网表示,如图7-33所示。

1求出每个事件的最早发生时间和最晚发生时间。

2该工程完工至少需要多少时间?

3

图7-33—个AOE网

求出所有关键路径和关键活动。

1•关键路径

AOE网中,从事件i到j的路径中,加权长度最大者称为i到j的关键路径(CriticalPath),id为cp(i,j)。

特别地,始点0到终点n的关键路径cp(0,n)是整个AOE的关键路径。

显然,关键路径决定着AOE网的工期,关键路径的长度就是AOE网代表的工程所需的最小工期。

2.事件报早/晚发生时间

事件vi的最早发生时间ve(i)定义为:

从始点到vi的最长(加权)路径长度,即cp(0,i)事件vi的最晚发生时间vl(i)定义为:

在不拖延整个工期的条件下,vi的可能的最晚发生吋间o即vl(i)=vc(n)-cp(i,n)

3.活动最早/晚开始时间

活动ak=的最早开始时间e(k):

等于事件vi的最早发生时间,即

e(k)=ve(i)=cp(0,i)

活动ak=的最晩开始时间l(k)定义为:

在不拖延整个工期的条件下,该活动的允许的最迟开始时间,即

l(k)=vl(j)-len(i,j)

这里,MJ)是事件j的允许的最晩发生时间,len(i,j)是ak的权。

活动ak的最大可利用时间:

定义为l(k)-e(k)

4.关键活动

若活动ak的最大可利用时间筹于0(即(l(k)=e(k)),则称ak为关键活动,否则为非关键活动。

显然,关键活动的延期,会使整个工程延期。

但非关键活动不然,只要它的延期最不超过它的最大可利用时间,就不会影响整个工期。

(11)写出静态查找表的顺序存储结构以及顺序查找算法。

(参考P216算法9.1)(差结构)intSeq_Search(SSTableST,KeyTypekey)

{intp;

ST.elem[O].key=key;/*设置监视哨兵,失败返回0*/

for(p=ST.length;!

EQ(ST.elem[p].key,key);p-)return(p);

}

比较次数:

查找第n个元素:

1

查找第i个元素:

n-i+1

查找第1个元素:

n

查找失败:

n+1

(12)写出旬芋表的折半杳找算法(参考P220算法9.2),并呦出13个元素的判定树。

(还并判定树)

intBin_Search(SSTableST,KeyTypekey)

{intLow=l,High=ST.length,Mid;

while(Low

{Mid=(Low+High)/2;

if(EQ(ST.elem[Mid].key,key))

return(Mid);

elseif(LT(ST.elem[Mid].key,key))

Low=Mid+l;

elseHigh=Mid-l;

}

return(O);/*查找失败*/

(13)写出索引顺序表的分块查找算法。

typedefstructIndexType

{keyTypemaxkey;/*块中最大的关键字*/

intstartpos;/*块的起始位置指针*/

JIndex;

intBlock_search(RecTypeST[],Indexind[],KeyTypekey,intn,intb)

/*在分块索引表中查找关键字为key的记录*/

/*表长为n,块数为b*/

{inti=0,j,k;

while((i

if(i>b){printf(n\nNotfound**);return(O);}

j=ind[i(.startpos;

while((j

{if(EQ(ST[j]・key,key))break;

j++;

}/*在块内查找*/

if(j>nll!

EQ(ST[j]・key,key))

{j=0;printf(n\nNotfound");}

return(j);

}

(14)对于一个有n个元索的线性表,请分析采用以上3种查找方法(顺序查找方法、折半查

找方法、索引分块杏找方法)的平均杏找长度分别是什么?

1、简述顺序查找、折半查找和分块检索法对被栓素表中元素中的要求。

若检素表中每个元素概率相同,则对一个长度为“的表,臣上面三种方法检素时平均查找长度为多少?

答:

对于顺序检索法,表中元素可以以任何方式存放;而采用折半检索法时要求表中元素

必须是有序的,

而且需要以顺序方式进行存储;若利用分块检索法,则要求表中元素需“块”间有序,但

每一块内元素可任意存放。

顺序和折半查找的平均检索长度分别为:

(n+l)/2和log2(n+l)・l。

分块法的平均查找长度

与确定所在块所采用的检索方法有关,

若用顺序法确定块则长度为(n/s+s)/2+l,若用折半法确定块,则查找长度为log2(n/s+l)+s/2,

其中s为每块含有的元素个数

(15)对于一个有n个元素的线性衣,若采用顺序查找方法时的平均查找长度是什么?

若结

点是冇序的,则采用折半查找法是的平均查找长度是什么?

(16)设查找表采用单链表存储,请分別写出対该表进行顺序查找的静态查找和动态查找

的算法。

的要求是:

若链表中有关键字值为key的结点,

则将该结点删除;否则,将其衣

1、设查找表采用单链表存储,清写出对该表进行顺序查找的动态查找的算法。

 

/*关键字码"

/*其他域*/

/*指针域*/

的最后°数据结构定义如下:

(7分)

tjpcdcfstructLnodc

{KcyTypckeyinfoTypcothcrinfostructLnodc*ncxt;

JLNodc;/*结点的类型*/

(17)设二义排序树中的关键字互不相同:

1最小元素无左孩子,最大元素无右孩子,此命题是否正确?

2最人和最小元素一定是叶了结点吗?

3一•个新结点总是插入在叶子结点上吗?

6.设二叉排序树中关键字互不相同,则其中最小元必无左孩子,最大元必无右孩子,此命题是否正确?

最小元和最大元一定是叶子吗?

一个新结点总是插在二叉排序树的某叶子上吗?

答:

此命题正确。

假设最小元有左孩子,则根据二叉排序树性质,此左孩子应比最小元更小,如此一来就产生矛盾了,因此最小元不可能有左孩子,对于最大元也是这个道理。

但最大元和最小元不一定是叶子,它也可以是根、内部结点(分支结点)等,这得根据插入结点时的次序而定。

新结点总是作为叶子插入在二叉排序树中的3

(⑻试比较哈希表构造时几种冲突处理方法的优点和缺点。

(19)将关键字序列(10,2,26,4,18,24,21,15,8,23,5,12,14)依次插入到初态为空的二叉排序树中,请画出所得到的树T;然后画岀删除10之后的二叉排序树T1;若再将10插入到T1中得到的二叉排序树T2是否与T1相同?

请给出T2的先序、中序和后序序列。

(20)设有关键字序列为:

(Dec,Feb,Nov,Oct,June,Sept,Aug,Apr,May,July,Jan,Mar),请手工构造一棵二叉排序树。

该树是平衡二叉排序树?

若不是,请为其构造一棵平衡二叉排序树。

(21)设关键字序列是(19,14,23,01,6&84,27,55,11,34,79),散列表长度是11,散列函数是H(key)=keyMOD11,

1采用开放地址法的线性探测方法解决冲突,请构造该关键字序列的哈希表。

2采用开放地址法的二次探测方法解决冲突,请构造该关键字序列的哈希表。

(23)设关键字序列是(19,24,23,17,38,04,27,51,31,34,69),散列表长度是11,散列函数是

H(key)=keyMOD11,

1采用开放地址法的线性探测方法解决冲突,请构造该关键字序列的哈希表。

2求出在等概率情况下,该方法的查找成功和不成功的平均查找长度ASL。

(24)回答卜列各题:

1从未排序序列中挑选元素,并将其依次放入到已排序序列中(初始时为空)的一端的方法是什么?

插入排序

2在待排序的元索基本有序的前捉下,效率最高的排序方法是什么?

冒泡排序

3从未排序序列中依次取出元索与已排序序列(初始时为空)中的元索进行比较,将其放入已排序序列的正确位置方法是什么?

插入排序

4设有1000个元素,希望采用最快的速度挑选出其中前10个最大的元素,最好的方法是什么?

堆排序

(25)若对关键字序列为(54,37,93,25,17,68,5&41,76)的一组记录进行快速排序吋,递归调川使川的栈所能到达的授大深度是多少?

共需递归调川多少次?

其中笫二次递归调川是对哪组记录进行排序?

参考:

.在利用快速排序方法对一组记录(54,38,96,23,15,72,60,45,83)进行快速排序时,递归调用而使用的栈的所能达到的最大深度为

(2),共需递归调用的次数为(4),其中第二次递归调用是对((23,38,15))一组记录进行快速排序。

(26)在堆排序,快速排序和归并排序中,若只从存储空间考虑,应选择哪种方法;若只从排序结果的稳定性考虑,应选择哪种方法;若只从平均悄况下排序最快考虑,皿选择哪种方法;在堆排序,快速排序和归并排序中,若只从存储空间考虑,则应首先选取(堆排序)方法,其次选取(快速排序)方法,最后选取(归并排序)方法:

若只从排序结果的稳定性考虑,则应选収(归并排序)方法:

若只从平均借况下排序最快考虑,则应选収(快速排序)方法:

若只从最坏情况下排序戢快并且要节省内存考虑,则应选取(堆排序)方法。

(27)设有关键字序列为(14,17,53,35,9,32,68,41,76,23)的一组记录,请给出用希尔排序法(增量序列是5,3,1)排序时的每一躺结果。

(28)设有关键字序列为(14,17,53,35,9,37,6&21,46)的一组记录,请给出冒泡排序法排序时的每一躺结果。

(29)设有关键字序列为(14,17,53,35,9,37,68,21,46)的一组记录,利用快速排序法进行排序时,请给出以笫一个记录为基准得到的一次划分结果。

(30)设关键字序列为(14,17,53,35,9,37,68,21)的一组记录,请给出按非递增釆用堆排序时的每一躺结果。

(31)设关键字序列为(314,617,253,335,19,237,464,121,46,231,176,344)的一组记录,请给出采用基数排序时的每一躺结果。

1212312533144643443354617661723719

3146171912123133523734446253464176

1946121176231237253314335344464617

(32)将哨兵放在R|_M中,被排序的记录存放在RLl-n-l]中,重写直接插入排序算法。

解:

董习的雾法如下二

voidInscmSon(SccgLisrK)

{//对中记:

gtRtQai曲送壇庁进行》><•揶庁fo

IS后苔疾陋

if(R町.0ARR+lj.kcy)//»:

不是这祥貝[|RDQ原位不动

{

R(n]=RH;j=i+l;//R[ai是喑定

do{//从左向右在有序区中査找推入位驾

RB-1]=RB];//箱兴铠宁小于R0key的记争司右移

j++:

RD-l]=R[n];//将RR»入我正确位置上

}//encfif

}//iDscrrSo^t-

(33)实际中常采用单链表存储数据记录,请写出排序记录的结构的定义并修改。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1