数据结构后面的复习汇总doc.docx
- 文档编号:26580138
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:20
- 大小:302.29KB
数据结构后面的复习汇总doc.docx
《数据结构后面的复习汇总doc.docx》由会员分享,可在线阅读,更多相关《数据结构后面的复习汇总doc.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构后面的复习汇总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)。
⑵设一有向图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=
等于事件vi的最早发生时间,即
e(k)=ve(i)=cp(0,i)
活动ak=
在不拖延整个工期的条件下,该活动的允许的最迟开始时间,即
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)实际中常采用单链表存储数据记录,请写出排序记录的结构的定义并修改。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 后面 复习 汇总 doc