数据结构期末重点复习题.pptx
《数据结构期末重点复习题.pptx》由会员分享,可在线阅读,更多相关《数据结构期末重点复习题.pptx(105页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12023/3/16顺序表算法设计练习:已知一个顺序表L,其中的元素递增有序排列,设计一个算法插入一个元素x后保持该顺序表仍递增有序排列。第1页/共105页22023/3/16参考算法:Voidinsert(Sqlist&L,ElemTypex)inti=0,j;if(L.length+1L.listsize)p24while(i=L.elemi)i+;for(j=L.length-1;j=i;j-)L.elemj+1=L.elemj;L.elemi=x;L.length+;第2页/共105页32023/3/16顺序表算法设计练习:试写一个算法,实现顺序表的就地逆置,即利用原表的存储空间将线性
2、表。(a1,a2,an)逆置为(an,an-1,a1)。第3页/共105页42023/3/16参考算法:Voidreverse(Sqlist&L)inti=0,j=L.length-1;while(ij)L.elemiL.elemj;i+;j-;第4页/共105页52023/3/16顺序表算法设计练习:试设计一个高效的算法,删除线性表L中所有值为x的元素。第5页/共105页62023/3/16参考算法:Voiddeletelist(Sqlist&L,ElemTypex)intcount=0;for(i=0;inext,r;If(q!=Null)r=q-next;Elsereturn0;Whil
3、e(r!=Null&r-data!=x)p=q;q=r;r=r-next;if(r!=Null)p-next=q-next;free(q);elsereturn0;return1;第8页/共105页92023/3/16链表算法设计练习:设计一个算法,在带头结点的单链表head中删除一个data域值最小的结点,假设该结点唯一。第9页/共105页102023/3/16参考算法:VoidDelMinNode(Linklisthead)Linklistp=head-next,pre=head;Linklistminp,minpre;Elemtypemin=p-data;minp=p;minpre=pr
4、e;While(p!=NULL)If(p-datadata)min=p-data;minp=p;minpre=pre;pre=p;p=p-next;minpre-next=minp-next;Free(minp);第10页/共105页112023/3/161、假设表达式中允许包含3种括号:圆括号、方括号和大括号。设计一个算法采用顺序栈判断表达式中的括号是否正确配对。Int match(char exp,int n)char stMaxsize;int top=-1;int i=0,tag=1;while(idata=x;if(rear=NULL)s-next=s;rear=s;elses-ne
5、xt=rear-next;rear-next=s;rear=s第12页/共105页132023/3/16作业:作业:1、设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分,将所有的偶数放在数组的后半部分。要求尽可能少用临时存储单元并使时间最少。2、设计一个算法,计算一个三元组表表示的稀疏矩阵的对角线元素之和。第13页/共105页14例:例:设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为()A5 B6 C7 D8提示:提示:因为每个结点都有一条枝指向它,分支数为1*4+2*2+3*1+4*1所有结点数为分支数+1,所以1*4+2*2
6、+3*1+4*1=4+2+1+1+x x=8例:例:若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A9 B11 C15 D不确定提示:提示:n0=n2+1第14页/共105页15例3:已知某二叉树先序序列 ABHFDECKG 和中序序列 HBDFAEKCG,画出该二叉树。HBDFEKCGAEKCGABHDFEKCGABHFDEABHFDCKGAKCGEBHFDA第15页/共105页16例1:统计二叉树中叶子结点的个数Status CountLeaf(BiTree T,int&count)if(T)if(T-lchild=NULL)&(T-rchild=NULL)
7、count+;return OK;CountLeaf(T-lchild,count);/统计左子树中叶子结点个数 CountLeaf(T-rchild,count);/统计右子树中叶子结点个数 else return ERROR;第16页/共105页17例2:求二叉树的深度int Depth(BiTree T)if(!T)depthval=0;else depthLeft=Depth(T-lchild);depthRight=Depth(T-rchild);depthval=1+max(depthLeft,depthRight);return depthval;第17页/共105页18例3:按
8、先序序列建立二叉树的二叉链表已知先序序列:A B C 0 0 D E 0 G 0 0 F 0 0 0(其中0表示空格字符,空指针)建立相应的二叉链表ABCDEFG第18页/共105页19例:例:对于前序遍历与中序遍历结果相同的二叉树();对于前序遍历和后序遍历结果相同的二叉树为()。A一般二叉树 B只有根结点的二叉树 C根结点无左孩子的二叉树 D根结点无右孩子的二叉树 E所有结点只有左子数的二叉树 F所有结点只有右子树的二叉树例:例:某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。A空或只有一个结点 B任一结点无左子树 C高度等于其结点数 D任一结点无右子树FB第19页/共
9、105页20例:一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是:()A不确定 B.0 C.1 D.2 例:一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:()。A.0 B.1 C.2 D.不确定 左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个空链域只有最后一个叶结点没有后继第20页/共105页21例:线索二叉树是一种()结构。A 逻辑 B 逻辑和存储 C 物理 D线性例:n个结点的线索二叉树上含有的线索数为()A2n Bn1 Cn1 Dn N个结点共有2n个指针域,二叉链表用了n-1个,剩下n+1个第21页/共10
10、5页22练习:写出下图所示树的先序和后序遍历序列并将之转换成一棵二叉树ABCDEFHGI先根遍历:先根遍历:ABDEGHICF后根遍历:后根遍历:DGHIEBFCAABGDCFHEI第22页/共105页236.4.2 6.4.2 森林和二叉树的转换规则设森林F=T1,T2,Tm,二叉树B=(root,LB,RB)(1)森林转化成二叉树的规则 若F为空(m=0),B为空;若F不空(m0),B的根root(B)是F中第一棵树T1的根root(T1);左子树LB从T1根结点的子树森林(T11,T12,T1m)转换来;右子树RB是从森林F=T2,T3,Tm 转换而来。(2)二叉树转换为森林的规则 若B
11、为空,F为空;若B非空,则F中第一棵树T1的根为二叉树的根root(B);T1根的子树森林F1由B的左子树LB转换而来;F 中除 T1 外其余树组成的森林F=T2,T3,Tn 由B 的右子树 RB 转换而来。第23页/共105页24森林转换成二叉树步骤1:转换将各棵树分别转换成二叉树步骤2:加线将每棵树的根结点用线相连步骤3:旋转以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树ABCDEFGHIJ森林森林F FABCDEFGHIJF F中每棵树对应的二叉树中每棵树对应的二叉树第24页/共105页25森林转换成二叉树步骤1:转换将各棵树分别转换成二叉树步骤2:加线将每棵树的
12、根结点用线相连步骤3:旋转以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树ABCDEFGHIJABCDEFGHIJ森林森林F F第25页/共105页26森林转换成二叉树步骤1:转换将各棵树分别转换成二叉树步骤2:加线将每棵树的根结点用线相连步骤3:旋转以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树ABCDEFGHIJABCDEFGHIJ森林森林F FF F转换的二叉树转换的二叉树B BABCDEFGHIJ第26页/共105页27二叉树转换成森林步骤1:抹线将二叉树根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤
13、2:还原将孤立的二叉树还原成树二叉树二叉树B BABCDEFGHIJ第27页/共105页28二叉树转换成森林步骤1:抹线将二叉树根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤2:还原将孤立的二叉树还原成树二叉树二叉树B BABCDEFGHIJABCDEFGHIJ第28页/共105页29二叉树转换成森林步骤1:抹线将二叉树根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤2:还原将孤立的二叉树还原成树ABCDEFGHIJ二叉树二叉树B BABCDEFGHIJABCDEFGHIJ第29页/共105页30二叉树转换成森林步骤
14、1:抹线将二叉树根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤2:还原将孤立的二叉树还原成树B B转换成的森林转换成的森林F F二叉树二叉树B BABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ第30页/共105页31练习:写出下图所示森林的先序和中序遍历序列并将之转换成一棵二叉树EABCDFIJHGK先序遍历:先序遍历:中序遍历:中序遍历:ABCDEFIKJGHBEFDCIAJGHK第31页/共105页32例:设F是一个森林,B是由F变换得的二叉树。若中有n个非终端结点,则B中右指针域为空的结点有()个。A n-1 Bn
15、 C n+1 D n+2 每一个非终端结点的孩子中都会贡献出一个空的右指针例:设F是由T1,T2,T3三棵树组成的森林,与F对应的二叉树为B,已知T1,T2,T3的结点数分别为n1,n2和n3则二叉树B的左子树中有个结点,右子树中有个结点。n1-1n2+n3第32页/共105页33构造最优二叉树的说明1 在选取两棵根结点权值为最小和次小的二叉树时,如果出现权值相同的情况,可以在相同权值的二叉树中任选一棵。2 当两棵根结点权值为最小和次小的二叉树组成新的二叉树的左右子树时,谁是左子树谁是右子树没有特殊规定。3 在最优二叉树中没有度为1的结点,根据二叉树的性质3可知有n个叶子结点的二叉树有n-1个
16、非终端结点共有2*n-1个结点。a7b5c2d461118a7b5d4c261118第33页/共105页34如何得到最短的二进制前缀码(赫夫曼编码)?如何得到最短的二进制前缀码(赫夫曼编码)?为了设计电文总长最短的二进制前缀编码,以n种字符出现的频率作权,设计一棵赫夫曼树,从根节点至即所有叶子节点,按左分支为0,右分支为1的原则即可得到最短二进制前缀编码即赫夫曼编码。例:已知某系统在通信联络中只可能出现例:已知某系统在通信联络中只可能出现8种字符,其概率为种字符,其概率为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,设计赫夫曼编码。设计赫夫曼编码。解:设权解:
17、设权w=(5,29,7,8,14,23,3,11)第34页/共105页350231411529378000000111111110058428291519编码:编码:3(0111)5(0110)7(1110)8(1111)11(010)14(110)23(00)29(10)第35页/共105页36练习:用于通信的电文由8个字母c1,c2,c3,c4,c5,c6,c7,c8组成,各字母在电文中出现的频率分别为5,25,3,6,10,11,36,4。试设计不等长Huffman编码,并给出该电文的总码数。000000010010100010100000001001010001010111011011
18、1011电文总码数电文总码数=4*5+2*25+4*3+4*6+3*10+3*11+2*36+4*4=257第36页/共105页372023/3/16练习练习(1)设无向图的顶点个数为n,则该图最多有()条边。(2)一个有n个结点的图,最少有()个连通分量,最多有()个连通分量。(3)在一个无向图中,所有顶点的度数之和等于所有边数的_倍。(4)要连通具有n个顶点的有向图,至少需要()条边。(5)若无向图G=(V,E)中含7个顶点,则保证图G在任何情况下都是连通的,则需要的边数最少是()。第37页/共105页382023/3/16无向图邻接表表示V1V2V4V5V3顶点的度:该顶点所在单链表中表
19、结点个数V1V2V3V4V501234130420212143与顶点V1相邻接的顶点在数组中的下标第38页/共105页392023/3/16V1V2V4V5V3254311邻接表表示V1V2V3V4V501234123402452111413304231521权值无向网第39页/共105页402023/3/16V1V2V3V4邻接表表示12V1V2V3V4012330以顶点V1为始点的弧的终点顶点在数组中的下标顶点的出度该顶点所在单链表中表结点个数顶点的入度查询整个邻接表中的表结点,与该顶点的序号(数组下标)一致的表结点个数有向图第40页/共105页412023/3/16图的邻接表表示问题:具
20、有n个顶点e条边的无向图的邻接表中有多少个表头结点?有多个表结点(边结点)?有向图呢?第41页/共105页422023/3/16练习:请画出下图的邻接矩阵和邻接表第42页/共105页432023/3/167.3.1 7.3.1 深度优先搜索-举例1234V1V3V4V2data firstarc2783adjvexnextarc5V564151282V6V7V8678736354V1V2V4V5V3V7V6V8深度遍历:深度遍历:V1V3 V7 V6 V2 V5 V8 V4给定存储结构,图的遍历序列唯一第43页/共105页442023/3/167.3.2 广度优先搜索-举例广度遍历:广度遍历:
21、V1 V3 V2 V7 V6 V5 V4 V81234V1V3V4V2data firstarc2783adjvexnextarc5V564151282V6V7V8678736354V1V2V4V5V3V7V6V8给定存储结构,图的遍历序列唯一第44页/共105页452023/3/16下列有关图遍历的说法中不正确的是()A连通图的深度优先搜索是一个递归过程B图的广度优先搜索中邻接点的寻找具有“先进先出”的特征C.图的遍历要求每一顶点仅被访问一次D对图进行一次深度优先遍历可以访问图中所有顶点第45页/共105页462023/3/16给定有向图如下:给出其邻接表存储结构 基于邻接表,给出DFS序列
22、和BFS序列第46页/共105页472023/3/16练习:已知一个图的顶点集V和边集E分别为:V=1,2,3,4,5,6,7;E=(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25;用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。【答】用克鲁斯卡尔算法得到的最小生成树为:(1,2)3,(4,6)4,(1,3)5,(1,4)8,(2,5)10,(4,7)20第47页/共105页482023/3/16练习:设有无向图G,要求给出用普里姆算法构造最小
23、生成树所走过的边的集合。【答】E=(1,3),(1,2),(3,5),(5,6),(6,4)第48页/共105页492023/3/167.5.1 7.5.1 拓扑排序-实现步骤C1C3C2C7C5C6C4编号课程名称C1数学C2程序设计C3离散数学C4汇编程序设计C5数据结构C6结构程序设计C7编译原理C1C3C2C7C5C6C4拓扑有序序列:C1=C3=C2=C4=C6=C5=C7逻辑结构上:拓扑序列不唯一第49页/共105页502023/3/167.5.2 7.5.2 关键路径 AOE-网(Active On Edge):在带权的有向无环图中,顶点表示事件,弧表示工程的一个活动,弧上权值表
24、示活动持续的时间。用来估算工程完成时间。源点:入度为0的顶点。汇点:出度为0的顶点。路径长度:AOE网中路径上各活动持续时间之和。关键路径:路径长度最长的路径。V1V3V4V6V5V8V2V7V9a1=6a7=9a5=1a2=4a4=1a10=2a3=5a6=2a9=4a11=4a8=7说明:(1)完成工程的最短时间是从开始点到完成点的最长路径的长度。(2)关键路径的改变会影响整个工期。第50页/共105页512023/3/16设活动ai在有向无环图G的有向边上:事件vj的最早发生时间ve(j):从源点v0到vj的最长路径长度。ve(0)=0;ve(j)=从源点到顶点j的最长的路径长度。ve(
25、k)=Maxve(j)+dut()事件vj的最迟开始时间vl(j):保证汇点vn-1在ve(n-1)时刻完成的前提下,事件vj最迟允许开始的时间。vl(n-1)=ve(n-1)从源点到汇点的最长路径长度;vl(k)=从汇点到顶点k的最短的路径长度。vl(j)=Minvl(k)-dut()kj dut()ai7.5.2 7.5.2 关键路径定义和术语第51页/共105页522023/3/167.5.2 7.5.2 关键路径定义和术语设活动ai在有向边上,有:活动ai的最早开始时间e(i):从源点v0到vj的最长路径长度。e(i)=ve(j);活动ai的最迟开始时间l(i):是不推迟工程完成的前提
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 期末 重点 复习题
限制150内