数据结构期末重点复习题.ppt
《数据结构期末重点复习题.ppt》由会员分享,可在线阅读,更多相关《数据结构期末重点复习题.ppt(105页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1作业:1、简述逻辑结构和存储结构的联系?2、数据结构和数据类型有什么区别?3、分析以下算法的时间复杂度voidfunc(intn)inti=0,s=0;while(sL.listsize)p24while(i=L.elemi)i+;for(j=L.length-1;j=i;j-)L.elemj+1=L.elemj;L.elemi=x;L.length+;42022/12/30顺序表算法设计练习:顺序表算法设计练习:n试写一个算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表。(a1,a2,an)逆置为(an,an-1,a1)。52022/12/30参考算法:参考算法:Voidrever
2、se(Sqlist&L)inti=0,j=L.length-1;while(ij)L.elemiL.elemj;i+;j-;62022/12/30顺序表算法设计练习:顺序表算法设计练习:n试设计一个高效的算法,删除线性表L中所有值为x的元素。72022/12/30参考算法:参考算法:Voiddeletelist(Sqlist&L,ElemTypex)intcount=0;for(i=0;inext,r;If(q!=Null)r=q-next;Elsereturn0;While(r!=Null&r-data!=x)p=q;q=r;r=r-next;if(r!=Null)p-next=q-next
3、;free(q);elsereturn0;return1;102022/12/30链表算法设计练习:链表算法设计练习:n设计一个算法,在带头结点的单链表head中删除一个data域值最小的结点,假设该结点唯一。112022/12/30参考算法:参考算法:VoidDelMinNode(Linklisthead)Linklistp=head-next,pre=head;Linklistminp,minpre;Elemtypemin=p-data;minp=p;minpre=pre;While(p!=NULL)If(p-datadata)min=p-data;minp=p;minpre=pre;pr
4、e=p;p=p-next;minpre-next=minp-next;Free(minp);122022/12/301、假设表达式中允许包含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-next=rear-next;rear-next=s;rear=s142022/12/30作业:作业:1、设一系列正整数存放在一个数组中,试设计
5、算法,将所有奇数存放在数组的前半部分,将所有的偶数放在数组的后半部分。要求尽可能少用临时存储单元并使时间最少。2、设计一个算法,计算一个三元组表表示的稀疏矩阵的对角线元素之和。15例:例:设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为()A5B6C7D8提示:提示:因为每个结点都有一条枝指向它,分支数为1*4+2*2+3*1+4*1所有结点数为分支数+1,所以1*4+2*2+3*1+4*1=4+2+1+1+xx=8例:例:若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A9B11C15D不确定提示:提示:n0=n2+116例例
6、3:已知某二叉树先序序列:已知某二叉树先序序列 ABHFDECKG 和中序序列和中序序列 HBDFAEKCG,画出该二叉树。画出该二叉树。HBDFEKCGAEKCGABHDFEKCGABHFDEABHFDCKGAKCGEBHFDA17例1:统计二叉树中叶子结点的个数StatusCountLeaf(BiTreeT,int&count)if(T)if(T-lchild=NULL)&(T-rchild=NULL)count+;returnOK;CountLeaf(T-lchild,count);/统计左子树中叶子结点个数CountLeaf(T-rchild,count);/统计右子树中叶子结点个数e
7、lsereturnERROR;18例2:求二叉树的深度intDepth(BiTreeT)if(!T)depthval=0;elsedepthLeft=Depth(T-lchild);depthRight=Depth(T-rchild);depthval=1+max(depthLeft,depthRight);returndepthval;19例3:按先序序列建立二叉树的二叉链表已知先序序列:ABC00DE0G00F000(其中0表示空格字符,空指针)建立相应的二叉链表ABCDEFG20例:例:对于前序遍历与中序遍历结果相同的二叉树();对于前序遍历和后序遍历结果相同的二叉树为()。A一般二叉树
8、 B只有根结点的二叉树 C根结点无左孩子的二叉树 D根结点无右孩子的二叉树 E所有结点只有左子数的二叉树 F所有结点只有右子树的二叉树例:例:某二叉树的前序序列和后序序列正好相反,则该二叉树一定是()的二叉树。A空或只有一个结点B任一结点无左子树C高度等于其结点数D任一结点无右子树FB21例:一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是:()A不确定 B.0 C.1 D.2 例:一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是:()。A.0 B.1 C.2 D.不确定 左子树为空的二叉树的根结点的左线索为空(无前驱),先序序列的最后结点的右线索为空(无后继),共2个
9、空链域只有最后一个叶结点没有后继22例:线索二叉树是一种()结构。A逻辑B逻辑和存储C物理D线性例:n个结点的线索二叉树上含有的线索数为()A2nBn1Cn1DnN个结点共有2n个指针域,二叉链表用了n-1个,剩下n+1个23练习:写出下图所示树的先序和后序遍历序列并将之转换成一棵二叉树ABCDEFHGI先根遍历:先根遍历:ABDEGHICF后根遍历:后根遍历:DGHIEBFCAABGDCFHEI246.4.2 森林和二叉树的转换规则设森林F=T1,T2,Tm,二叉树B=(root,LB,RB)(1)森林转化成二叉树的规则若F为空(m=0),B为空;若F不空(m0),B的根root(B)是F中
10、第一棵树T1的根root(T1);左子树LB从T1根结点的子树森林(T11,T12,T1m)转换来;右子树RB是从森林F=T2,T3,Tm转换而来。(2)二叉树转换为森林的规则若B为空,F为空;若B非空,则F中第一棵树T1的根为二叉树的根root(B);T1根的子树森林F1由B的左子树LB转换而来;F中除T1外其余树组成的森林F=T2,T3,Tn由B的右子树RB转换而来。25森林转换成二叉树步骤1:转换将各棵树分别转换成二叉树步骤2:加线将每棵树的根结点用线相连步骤3:旋转以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树ABCDEFGHIJ森林森林F FABCDEFGHI
11、JF F中每棵树对应的二叉树中每棵树对应的二叉树26森林转换成二叉树步骤1:转换将各棵树分别转换成二叉树步骤2:加线将每棵树的根结点用线相连步骤3:旋转以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树ABCDEFGHIJABCDEFGHIJ森林森林F F27森林转换成二叉树步骤1:转换将各棵树分别转换成二叉树步骤2:加线将每棵树的根结点用线相连步骤3:旋转以第一棵树根结点为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树ABCDEFGHIJABCDEFGHIJ森林森林F FF F转换的二叉树转换的二叉树B BABCDEFGHIJ28二叉树转换成森林步骤1:抹线将二叉树
12、根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤2:还原将孤立的二叉树还原成树二叉树二叉树B BABCDEFGHIJ29二叉树转换成森林步骤1:抹线将二叉树根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤2:还原将孤立的二叉树还原成树二叉树二叉树B BABCDEFGHIJABCDEFGHIJ30二叉树转换成森林步骤1:抹线将二叉树根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤2:还原将孤立的二叉树还原成树ABCDEFGHIJ二叉树二叉树B BABCDEFGHIJABCDEFGHI
13、J31二叉树转换成森林步骤1:抹线将二叉树根结点与其右孩子连线、沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成多棵二叉树步骤2:还原将孤立的二叉树还原成树B B转换成的森林转换成的森林F F二叉树二叉树B BABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ32练习:写出下图所示森林的先序和中序遍历序列并将之转换成一棵二叉树EABCDFIJHGK先序遍历:先序遍历:中序遍历:中序遍历:ABCDEFIKJGHBEFDCIAJGHK33例:设F是一个森林,B是由F变换得的二叉树。若中有n个非终端结点,则B中右指针域为空的结点有()个。An-1BnCn+1Dn+2每
14、一个非终端结点的孩子中都会贡献出一个空的右指针例:设F是由T1,T2,T3三棵树组成的森林,与F对应的二叉树为B,已知T1,T2,T3的结点数分别为n1,n2和n3则二叉树B的左子树中有个结点,右子树中有个结点。n1-1n2+n334构造最优二叉树的说明1 在选取两棵根结点权值为最小和次小的二叉树时,如果出现权值相同的情况,可以在相同权值的二叉树中任选一棵。2 当两棵根结点权值为最小和次小的二叉树组成新的二叉树的左右子树时,谁是左子树谁是右子树没有特殊规定。3在最优二叉树中没有度为1的结点,根据二叉树的性质3可知有n个叶子结点的二叉树有n-1个非终端结点共有2*n-1个结点。a7b5c2d46
15、1118a7b5d4c26111835如何得到最短的二进制前缀码(赫夫曼编码)?如何得到最短的二进制前缀码(赫夫曼编码)?为了设计电文总长最短的二进制前缀编码,以n种字符出现的频率作权,设计一棵赫夫曼树,从根节点至即所有叶子节点,按左分支为0,右分支为1的原则即可得到最短二进制前缀编码即赫夫曼编码。例:已知某系统在通信联络中只可能出现例:已知某系统在通信联络中只可能出现8种字符,其概率为种字符,其概率为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,设计赫夫曼编码。设计赫夫曼编码。解:设权解:设权w=(5,29,7,8,14,23,3,11)3602314115
16、29378000000111111110058428291519编码:编码:3(0111)5(0110)7(1110)8(1111)11(010)14(110)23(00)29(10)37练习:练习:用于通信的电文由8个字母c1,c2,c3,c4,c5,c6,c7,c8组成,各字母在电文中出现的频率分别为5,25,3,6,10,11,36,4。试设计不等长Huffman编码,并给出该电文的总码数。0000000100101000101000000010010100010101110110111011电文总码数电文总码数=4*5+2*25+4*3+4*6+3*10+3*11+2*36+4*4=2
17、57382022/12/30练习练习(1)设无向图的顶点个数为n,则该图最多有()条边。(2)一个有n个结点的图,最少有()个连通分量,最多有()个连通分量。(3)在一个无向图中,所有顶点的度数之和等于所有边数的_倍。(4)要连通具有n个顶点的有向图,至少需要()条边。(5)若无向图G=(V,E)中含7个顶点,则保证图G在任何情况下都是连通的,则需要的边数最少是()。392022/12/30无向图邻接表表示V1V2V4V5V3顶点的度:该顶点所在单链表中表结点个数V1V2V3V4V501234130420212143与顶点V1相邻接的顶点在数组中的下标402022/12/30V1V2V4V5V
18、3254311邻接表表示V1V2V3V4V501234123402452111413304231521权值无向网412022/12/30V1V2 V3 V4 邻接表表示12V1V2V3V4012330以顶点V1为始点的弧的终点顶点在数组中的下标顶点的出度该顶点所在单链表中表结点个数顶点的入度查询整个邻接表中的表结点,与该顶点的序号(数组下标)一致的表结点个数有向图422022/12/30图的邻接表表示问题:具有n个顶点e条边的无向图的邻接表中有多少个表头结点?有多个表结点(边结点)?有向图呢?432022/12/30练习练习:请画出下图的邻接矩阵和邻接表442022/12/307.3.1 深度
19、优先搜索-举例1234V1V3V4V2data firstarc2783adjvexnextarc5V564151282V6V7V8678736354V1V2V4V5V3V7V6V8深度遍历:深度遍历:V1V3 V7 V6 V2 V5 V8 V4给定存储结构,图的遍历序列唯一给定存储结构,图的遍历序列唯一452022/12/307.3.2 广度优先搜索-举例广度遍历:广度遍历:V1 V3 V2 V7 V6 V5 V4 V81234V1V3V4V2data firstarc2783adjvexnextarc5V564151282V6V7V8678736354V1V2V4V5V3V7V6V8给定存
20、储结构,图的遍历序列唯一给定存储结构,图的遍历序列唯一462022/12/30下列有关图遍历的说法中不正确的是()A连通图的深度优先搜索是一个递归过程B图的广度优先搜索中邻接点的寻找具有“先进先出”的特征C.图的遍历要求每一顶点仅被访问一次D对图进行一次深度优先遍历可以访问图中所有顶点472022/12/30给定有向图如下:给出其邻接表存储结构基于邻接表,给出DFS序列和BFS序列482022/12/30练习:已知一个图的顶点集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)
21、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)20492022/12/30练习:设有无向图G,要求给出用普里姆算法构造最小生成树所走过的边的集合。【答】E=(1,3),(1,2),(3,5),(5,6),(6,4)502022/12/307.5.1 拓扑排序-实现步骤C1C3C2C7C5C6C4编号课程名称C1数学C2程序设计C3离散数学C4汇编程序设计C5数据结构C6结构程序设计C
22、7编译原理C1C3C2C7C5C6C4拓扑有序序列:拓扑有序序列:C1=C3=C2=C4=C6=C5=C7逻辑结构上:拓扑序列不唯一512022/12/307.5.2 关键路径AOE-网(ActiveOnEdge):在带权的有向无环图中,顶点表示事件,弧表示工程的一个活动,弧上权值表示活动持续的时间。用来估算工程完成时间。源点:入度为0的顶点。汇点:出度为0的顶点。路径长度:AOE网中路径上各活动持续时间之和。关键路径:路径长度最长的路径。V1V3V4V6V5V8V2V7V9a1=6a7=9a5=1a2=4a4=1a10=2a3=5a6=2a9=4a11=4a8=7说明:(1)完成工程的最短时
23、间是从开始点到完成点的最长路径的长度。(2)关键路径的改变会影响整个工期。522022/12/30设活动ai在有向无环图G的有向边上:n事件vj的最早发生时间ve(j):从源点v0到vj的最长路径长度。ve(0)=0;ve(j)=从源点到顶点j的最长的路径长度。ve(k)=Maxve(j)+dut()n事件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 关键路径定
24、义和术语532022/12/307.5.2 关键路径定义和术语设活动ai在有向边上,有:n活动ai的最早开始时间e(i):从源点v0到vj的最长路径长度。e(i)=ve(j);n活动ai的最迟开始时间l(i):是不推迟工程完成的前提下,该活动允许的最迟开始时间。l(i)=vl(k)-dut()n活动ai时间余量:l(i)-e(i)n关键活动:满足l(i)=e(i)的活动。关键路径上的活动都是关键活动。kj dut()ai542022/12/307.5.2 关键路径求关键活动关键活动关键活动e(i)=l(i)e(i)=ve(j)l(i)=vl(k)-dut()ve(j)、vl(j)求顶点(事件)
25、vk的最早开始时间:从ve(0)=0向汇点方向递推求顶点(事件)vj的最迟开始时间:从vl(n-1)=ve(n-1)向源点递推V1V3V4V6V5V8V2V7V9a1=6a7=9a5=1a2=4a4=1a10=2a3=5a6=2a9=4a11=4a8=7ve(k)=Maxve(j)+dut()vl(j)=Minvl(k)-dut()在拓扑有序的前提下进行在拓扑有序的前提下进行在逆拓扑有序前提下进行在逆拓扑有序前提下进行552022/12/30由汇点至源点由汇点至源点由源点至汇点由源点至汇点1814161078660vl(i)181416775460ve(i)V9V8V7V6V5V4V3V2V1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 期末 重点 复习题
限制150内