1、简答题综合应用题简答题1.画出关系r=,的结构示意图。2画出关系r=,的结构示意图。3.简述算法的评价所包含的六个方面的内容。答:正确性:在合理地数据输入下,能在有限的运行时间内得出正确的结果 健壮性:对不和理的数据输入的反应和处理能力 可读性:阅读算法的方便程度 简单性:所采用的数据结构和方法的简单程度 时间复杂度:算法运行时间的相对量度 空间复杂性:算法在运行过程中的临时占用存储空间大小的量度4.叙述一下算法的五个特性。答:有穷性:一个算法必须在执行有穷步之后结束确定性:算法中的每一步都必须具有确切的含义可行性:算法中的每一步都必须是可行的输入:可以有多个输入量输出:执行结束后必须有输出5
2、请说明在单链表中插入一个结点时,为什么要保留插入位置的前驱结点的指针?答:在单链表中插入一个结点时,要插入的位置的前驱结点的指针原来指向的结点应成为新插入结点的后继,如不保留此指针,后继结点将无法链接在单链表中。6.在单链表中的表头插入一个元素或删除表头元素时的操作,与插入或删除非表头元素时的区别是什么?答:在表头插入或删除一个元素时,需要修改的是表头元素的指针,使其指向新插入元素或被删除表头元素的后继;而插入或删除非表头元素时需要修改的是其前驱元素的指针,使其指向新插入元素或被删除元素的后继。7.设单链表的结点结构为(data, next),next为指针域。已知指针px指向单链表中data
3、为x的结点,指针py指向data为y的新结点。请叙述下面各语句的作用和实现的操作: py-next=px-next; px-next=py;答: py-next=px-next; /将原链表中的px指向结点的指针域的值赋给新插入结点的指针域 px-next=py; /将指向新结点的指针值赋给px指向结点的指针域 完成在单链表中插入一个新结点8.请说明线性表顺序存储的静态分配的方式。答:静态分配是在类型定义中为存储线性表定义好对应的数组存储空间,程序在编译阶段就知道该类型变量的大小,并在程序开始运行前就分配存储空间的方式。9.用文字给出遍历一个单链表的算法描述。设置一个用于遍历表的指针;判断是否
4、已到达单链表的表尾;依次输出表结点的值;修改指针使其指向下一结点10说明稀疏矩阵存储结构中的十字链接存储方式。答:十字链接存储就是既带行指针向量又带列指针向量的链接存储。在这种方式中,每个三元组结点即处于同一行的单链表中,又处于同一列的单链表中,即处于所在行单链表和列单链表的交点处。11已知广义表A=(a,b,c),(d,e,f) 利用Head和Tail运算,写出从表A中取出原子元素e的运算。答:head(tail(head(tail(A)12请给出有关广义表的定义的描述。答:一个广义表是n(n=0)个元素的一个序列,当n=0时称为空表。一个非空的广义表的元素,可以是单元素,也可以是由单元素构
5、成的子表。广义表是一种递归的数据结构。13请说明栈的结构及操作方式。答:栈是一种运算受限的线性表,仅允许在表的一端进行插入和删除。允许运算的一端称为栈顶,栈顶的第一个元素称为栈顶元素,把表的另一端称为栈底。插入新元素称为进栈或入栈,新入栈的元素成为新的栈顶元素。删除元素称为出栈或退栈,被删除的是栈顶元素,删除后,其后继元素成为新的栈顶元素。14请说明为什么同一个入栈序列可能有多个不同的出栈序列?答:由于每一个元素在入栈后,在下一个新的元素入栈前,随时都可以出栈,而处于栈中的非栈顶元素在栈顶元素出栈后,可能成为新的栈顶元素,也可以出栈。依此就可能形成不同的出栈序列。15已知一个后缀算术表达式为:
6、25 x + a a b + * b + * 写出对应的中缀表达式。答:(25+x)*( a* (a+b)+b)16给出当入栈序列为:abcdef 时,出栈序列为:baedcf,使用栈的Push(S,n)和Pop(S)操作的过程。答:Push(S,a), Push(S,b), Pop(S), Pop(S), Push(S,c) , Push(S,d), Push(S,e),Pop(S), Pop(S), Pop(SPush(S,f),Pop(S)17队列是特殊的线性表,说明其特殊性。答:队列的特殊性在于它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除操作,每个
7、元素必然按照入队的次序离队。所以又把队列称为先进先出表。18简述队列的结构及操作。答:由于队列仅允许在表的队尾插入新元素,称为入队,在队首删除元素,称为出队,所以每个元素必须按照进入队列的次序出队,所以队列又称为先进先出表。19.已知一棵二叉树的中序序列为ABCDEFG,层序序列为BAFEGCD,请画出该二叉树。1) (A), B ,(CDEFG) 2) (A), B ,( (CDE), F, (G) ) 20.已知一棵线索化的二叉排序树如图shu15所示。(1)说明该树的线索化是基于何种遍历次序的;(2)在该树中插入元素值为53的结点并修改相应线索,画出修改之后的树。(1)中序(2)如图sh
8、u16shu15、shu1621画出与如图shu17所示森林对应的二叉树。如图shu1822.画出由三个结点a,b,c组成的5种不同结构的二叉树。如图shu1923.请说出具有什么特性的树称为二叉排序树。答:二叉排序树或是一棵空树,或是一棵由如下特性的非空二叉树:若它的左子树非空,则左子树上的所有结点的关键字均小于根结点的关键字;若它的右子树非空,则右子树上的所有结点的关键字均大于根结点的关键字;左、右子树本身又各是一棵二叉排序树。24.写出树型结构的5种不同的表示方式。答:1、分叉树 2、目录结构 3、集合图 4、凹入表 5、广义表25画出关系r=,的结构示意图。如图shu2026.设有序的
9、线性表为La=(26,34,48,57,62,79),请给出执行下面的程序段后的线性表。Insert(La,56); DeleteFront(La);InsertRear(La,DeleteFront(La);TraverseList(La);答:48,56,57,62,79,3427.叙述有关非空二叉排序树结点的有序性。答:在一棵非空的二叉排序树中,其结点的关键字是按照左子树、根和右子树有序的,所以对它进行中序遍历得到的结点序列是一个有序序列。28.说明为什么一棵二叉排序树在删除一个结点后,立即将这个结点插入时,不能保证插入到原来的位置上。答:由于从二叉排序树中删除一个结点,如果是一个分支结
10、点时,就破坏了原有结点之间的链接关系,需要重新修改指针,使得删除后仍为一棵二叉排序树。而新插入的结点都是被链接到叶子结点上,不破坏原有的树的结构。29.画出一个具有16个结点的完全二叉树按结点顺序编号如图shu2130.某二叉树结点的中序序列为CBDAEGF,后序序列为CBDGFEA,用中序序列形式给出结点A的子树所构成的森林。答:A结点的子树构成的森林为(T1,T2),其中T1为:CBD,T2为:EGF31.以4、5、6、7、8作为叶子结点a,b,c,d,e的权值构造哈夫曼树,画出这棵哈夫曼树。如图shu2232.树和二叉树之间有什么样的区别与联系?答:树和二叉树的区别有三:一是二叉树的度至
11、多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下, 也必须指出是左子树还是右子树,树无此限制;三是二叉树允许为空,树一般不允许为空(个别书上允许为空)。33.已知完全二叉树的第七层有10个叶子结点,则整个二叉树的结点数最多是多少?235。由于本题求二叉树的结点数最多是多少,第7层共有27-1=64个结点,已知有10个叶子,其余54个结点均为分支结点。它在第八层上有108个叶子结点。所以该二叉树的结点数最多可达(27-1+108)=235。(注意;本题并未明说完全二叉树的高度,但根据题意,只能8层。)34.二叉树有n个顶点,编号为1,2,3, ,n,设:* T中任一顶点V
12、的编号等于左子树中最小编号减1;* T中任一顶点V的右子树中的最小编号等于其左子树中的最大编号加1;试描绘该二叉树。该二叉树是按前序遍历顺序编号,以根结点为编号1,前序遍历的顺序是“根左右”。35说明在n个顶点的无向完全图中,边的条数为n(n-1)/2。答:因为在有n个顶点的无向完全图中,每一个顶点与其它任一顶点都有一条边相连,所以每一个顶点有n-1条边与其他顶点相连,则 n个顶点有n(n-1)条边。但在无向图中,顶点i到顶点j与顶点j到顶点i是同一条边,所以总共有n(n-1)/2条边。36对n个顶点的无向图G,采用邻接矩阵表示,如何判别任意两个顶点i和j是否有边相连?答:邻接矩阵中如果第i行
13、第j列的元素非0则表示顶点i与顶点j相连。37对n个顶点的无向图G,采用邻接矩阵表示,如何判别任意一个顶点的度是多少?答:任意一个顶点vi的度是第i行或第i列上非0元的个数。38用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?与边的条数是否有关?答:设图的顶点个数为n(n0),则邻接矩阵元素个数为n2,即顶点个数的平方,与图的边数无关。39说明图的深度搜索遍历的递归过程。答:类似于对树的先根遍历,是一个递归过程,可叙述为:首先访问一个顶点vi,并将其标记为已访问过,然后从vi的任一个未被访问过的邻接点出发进行深度搜索遍历,当vi的所有邻接点均被访问过时,则退回到上一个顶点vk,从vk的另
14、一个未被访问过的邻接点出发进行深度搜索遍历,直到退回到初始点并且没有未被访问过的邻接点为止。40设图G = (V, E),V = 1, 2, 3, 4, E = , , , ,从顶点1出发,对图G进行广度优先搜索的序列有几种?请写出这些序列。答:1 2 3 4 和 1 3 2 441说明图的广度搜索遍历的递归过程。答:类似于对树的按层遍历,其过程为:首先访问一个顶点vi,并将其标记为已访问过,然后访问vi的所有未被访问过的邻接点,其访问次序任意,假定为:vi1,vi2,vit,并均已标记访问,再按照vi1,vi2,vit,的次序,访问每一个顶点的所有未被访问的邻接点并标记,依次类推,直到图中所
15、有和初始点连通的顶点都被访问过为止。42什么是生成树?什么是最小生成树?答:连通图G的一个子图如果是一棵包含G的所有顶点的树,则该子图称为G的生成树。权最小的生成树称为G的最小生成树。43对于有向无环图,叙述求拓扑有序序列的步骤答:1)在有向图中选一个没有前驱(即入度为零)的顶点并输出。2)在图中删除该顶点及所有以它为尾的弧。3)重复1)和2),直至全部顶点输出,这时拓扑排序完成;否则,图中存在环,拓扑排序失败。44什么是内排序? 什么是外排序? 答:内排序是排序过程中参与排序的数据全部在内存中所做的排序,排序过程中无需进行内外存数据传送,决定排序方法时间性能的主要是数据排序码的比较次数和数据
16、对象的移动次数。外排序是在排序的过程中参与排序的数据太多,在内存中容纳不下,因此在排序过程中需要不断进行内外存的信息传送的排序。45若对关键字序列(43,02,80,48,26,57,15,73,21,24,66)进行一趟增量为3的希尔排序,则得到的结果是什么?答案:15,02,21,24,26,57,43,66,80,48,7346冒泡排序算法是否稳定?为什么?答:冒泡排序算法是稳定的。因为依据该排序算法的基本思想,排序过程只比较相邻两个记录的关键字,若交换记录也只在相邻二个记录之间进行,从而可知在交换过程中不会出现跨越多个记录的情形。即使是相邻两个记录关键字相同时,经过比较也不会产生相邻记
17、录的交换。所以冒泡排序法不会改变相同关键字记录的相对次序,故是稳定的。47在堆排序、快速排序和合并排序中,若只从存储空间考虑,则应首先选取哪种排序方法,其次选取哪种排序方法,最后选取哪种排序方法?答:堆排序,快速排序,归并排序48在堆排序、快速排序和合并排序中,若只从排序结果的稳定性考虑,则应选取哪种排序方法?答:归并排序49在堆排序、快速排序和合并排序中,若只从最坏情况下排序最快并且要节省内存考虑,则应选取哪种排序方法?若只从平均情况下排序最快考虑,则应选取哪种排序方法?答:快速排序,归并排序50请写出3个稳定的排序方法及3个不稳定的排序方法。答:稳定的排序方法有:直接插入排序、冒泡排序、归
18、并排序 不稳定的排序方法有:希尔排序、简单选择排序、快速排序、堆排序综合应用题1.一个5*5的矩阵,其中的元素当:列数-行数=1时,元素值为列数,其余元素为0。给出十字链接存储结构的示意图。答:矩阵十字链接存储结构:如图3-1 2求下列广义表运算的结果:(1) head(p,h,w);(2) tail(b,k,p,h);(3) head(a,b),(c,d);(4) tail(a,b),(c,d); (5) head(tail(a,b),(c,d); (6) tail(head(a,b),(c,d)答:(1) p (2) (k,p,h) (3) (a,b) (4) (c,d) (5) (c,d
19、) (6) (b)3.求下列广义表运算的结果:(1) tail(a,b),(c,d); (2) head(tail(a,b),(c,d); (3) tail(head(a,b),(c,d)答:(1) (c,d) (2) (c,d) (3) (b)4设Push(S,n)为入栈操作,Pop(S)为出栈操作,Peek(S)为读取栈顶元素操作。采用文字描述:对于给定的输入序列(11,12,14,15,17,18,21,23,26,28),输出序列为(11,15,17,21,23,18,14,12,26,28)的算法的步骤。答:算法如下:(1)执行入栈操作一次Push(S,n) (2)读取栈顶元素Pee
20、k(S) (3)判断:如果栈顶元素值为奇数,执行出栈操作Pop(S) (4)重复(1)(4)到输入序列全部入栈 (5)将栈中的元素依次出栈5给出对一个后缀算术表达式:24 8 + 3 * 4 10 7 - * / 求值过程中的数值栈的变化情况。答:如图4-1所示6将两个栈存入数组V1.m应如何安排最好?这时栈空、栈满的条件是什么?答:设栈S1和栈S2共享向量V1.m,初始时,栈S1的栈顶指针top0=0,栈S2的栈顶指针top1=m+1,当top0=0为左栈空,top1=m+1为右栈空;当top0=0并且top1=m+1时为全栈空。当top1-top0=1时为栈满7已知链队列的头尾指针分别是f
21、和r,请写出将s所指结点(值为x)入队的操作序列。答:s-data=x;s-next=r-next;r-next=s;r=s;8若元素的进栈序列为:A、B、C、D、E,运用栈操作,能否得到出栈序列B、C、A、E、D 和D、B、A、C、E?为什么?答:能得到出栈序列B、C、A、E、D,不能得到出栈序列D、B、A、C、E。其理由为:若出栈序列以D开头,说明在D之前的入栈元素是A、B和C,三个元素中C是栈顶元素,B和A不可能早于C出栈,故不可能得到D、B、A、C、E出栈序列。9.以关键字值:17,3,7,8,24,10,16,9,6为叶子结点的权值构造一棵哈夫曼树,并计算出其带权路径长度。答:WPL
22、=24*2+17*3+10*3+16*3+9*3+3*4+7*4+8*4+6*4=300 10.假定有6个叶子结点:A,B,C,D,E,F,分别带权为:8,4,3,6,2,5,构造出一棵哈夫曼树,并计算出其带权路径长度WPL。答:其带权路径WPL=8*2+6*2+5*3+4*3+3*3+2*3=70 shu1211.当将两个长度均为n的有序表A=(a1,a2,an)与B=(b1,b2,bn)(aibj,1i,jn)归并为一个有序表C=(c1, c2,c2n)时,所需进行的元素比较次数最少可达n,最多可达2n-1。(1)假设有序表C=(2,4,5,6,7,9),试举出两组A与B的例子,使它们在归
23、并过程中进行的元素比较次数分别达到最少和最多;(2)写出一般情况下,使归并所需进行的元素比较次数分别达到最少和最多时,A与B中的元素应满足的条件。答:(1)3,5(2)最少:A=(2,4,5) B=(6,7,9) 最多:A=(2,5,7) B=(4,6,9)12.假设以有序对表示从双亲结点到孩子结点的一条边,若已知树中边的集合为,请回答下列问题:(1)哪个结点是根结点?(2)哪些结点是叶子结点?(3)哪些结点是k的祖先?(4)哪些结点是j的兄弟?(5)树的深度是多少?答:(1)a(2)b,d,i,j,h,f,k(3)a,c,g(4)i(5)413对n个顶点的无向图G,采用邻接矩阵表示,如何判别
24、下列有关问题:(1)图中有多少条边?(2)任意两个顶点i和j是否有边相连?(3)任意一个顶点的度是多少?答:无向图的邻接矩阵是对称的,故它的边数应是上三角或下三角的非0元个数。(2)邻接矩阵中如果第i行第j列的元素非0则表示顶点i与顶点j相连。(3)任意一个顶点vi的度是第i行或第i列上非0元的个数。14设有一有向图为G=(V,E)。其中,V= v1, v2, v3, v4, v5,E=, , , , , , ,请画出该有向图并判断是否是强连通图。答:该有向图是强连通图,表示如下:7-1图7-115已知一个无向图的顶点集为a, b, c, d, e ,其邻接矩阵如图7-2所示,(1)画出该图的
25、图形;(2)根据邻接矩阵从顶点a 出发进行深度优先遍历和广度优先遍历,写出相应的遍历序列。图7-2 图7-3答:该图的图形如图7-3所示,深度优先遍历序列为:abdce 广度优先遍历序列为:abedc 16画出1个顶点、2个顶点、3个顶点、4个顶点和5个顶点的无向完全图。并说明在n个顶点的无向完全图中,边的条数为n(n-1)/2。答:如图7-4所示。因为在有n个顶点的无向完全图中,每一个顶点与其它任一顶点都有一条边相连,所以每一个顶点有n-1条边与其他顶点相连,则 n个顶点有n(n-1)条边。但在无向图中,顶点i到顶点j与顶点j到顶点i是同一条边,所以总共有n(n-1)/2条边。图7-417已
26、知某图的邻接表如图7-5所示,(1)写出由v1 开始的深度优先遍历的序列;(2)写出由v1 开始的广度优先遍历的序列图7-5答:(1) V1V2V5V3V4V6 (2) V1V2V3V4V5V618请分别用Prim算法和Kruskal算法构造图7-6的最小生成树,并求出该树的代价。 图7-6答案:如图7-7,7-8,7-9,7-10所示。图7-7图7-8图7-9图7-1019如图7-11所示,G=(V,E)是一个带有权的连通图,则:(1)请回答什么是G 的最小生成树;(2)G 为下图所示,请找出G 的所有最小生成树。图7-11答:(1)无向连通图的生成树包含图中全部n个顶点,以及足以使图连通的
27、n-1条边。而最小生成树则是各边权值之和最小的生成树。(2)最小生成树有两棵。下面的生成树给出顶点集合和边集合,边以三元组(Vi,Vj,W)形式),其中W代表权值。V(G)=1,2,3,4,5E1(G)=(4,5,2),(2,5,4),(2,3,5),(1,2,7);E2(G)=(4,5,2),(2,4,4),(2,3,5),(1,2,7)20试写出用克鲁斯卡尔(Kruskal)算法构造图7-12的一棵最小支撑(或生成)树的过程。答:V(G)=1,2,3,4,5,6,7;E(G)=(1,6,4),(1,7,6),(2,3,5),(2,4,8),(2,5,12),(1,2,18)21假定一个图型
28、结构的二元组表示如下:A=K,R ,K=01,02,03,04,05,06,07,R=r,r=(01,02),(01,03),(01,04),(02,05),(02,06),(03,07),(04,07),(05,06),其中r所列出的边的权按顺序为:3,5,2,6,4,8,3,7。 给出该图中顶点01与其他顶点之间的最短路径。答 :(01,02)=3;( 01,03)=5;( 01,04)=2;(01,02,05)=3+6=9;(01,02,06)=3+4=7;(01,04,07)=2+3=522.对下列关键字序列(33,25,48,59,36,72,46,07,65,20)构造表长为19的
29、散列表。假设散列函数为h(key)=key%13,用开放地址法解决冲突,探查序列为d=h(key),d+12,d-12,d+2 2,d-2 2,d+32,d-32,等等。(1)画出该散列表;(2)计算该散列表的装填因子;(3)求出等概率情况下查找成功的平均查找长度ASL。答:(1)见图(2)=10/19(3)ASL=(1*4+2*2+3*2+4*1)/10=1.823.从空树起,依次插入关键字37,50,42,18,48,12,56,30,23,构造一棵二叉排序树。(1)画出该二叉排序树;(2)画出从(1)所得树中删除关键字为37的结点之后的二叉排序树。答:(1)见图 (2)见图24.已知3阶
30、B-树如图cha14所示。(1)画出将关键字88插入之后的B-树; (2)画出将关键字47和66依次插入之后的B-树。见图25.试找出满足下列条件的二叉树1)先序序列与后序序列相同 2)中序序列与后序序列相同3)先序序列与中序序列相同 4)中序序列与层次遍历序列相同 答:() 若先序序列与后序序列相同,则或为空树,或为只有根结点的二叉树() 若中序序列与后序序列相同,则或为空树,或为任一结点至多只有左子树的二叉树() 若先序序列与中序序列相同,则或为空树,或为任一结点至多只有右子树的二叉树(4)若中序序列与层次遍历序列相同,则或为空树,或为任一结点至多只有右子树的二叉树。26给出一组关键字T=(12,2,16,30,8,28,4,10,20,6,18),写出用下列算法从小到大排序时第一趟结束时的序列; (1) 希尔排序(第一趟排序的增量为5) (2) 快速排序(选第一个记录为枢
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1