1.简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现?
答:若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构。数据在计算机中的存储表示称为数据的存储结构。可见,数据的逻辑结构是反映数据之间的固有关系,而数据的存储结构是数据在计算机中的存储表示。尽管因采用的存储结构不同,逻辑上相邻的结点,其物理地址未必相同,但可通过结点的内部信息,找到其相邻的结点,从而保留了逻辑结构的特点。采用的存储结构不同,对数据的操作在灵活性,算法复杂度等方面差别较大。
2.解释顺序存储结构和链式存储结构的特点,并比较顺序存储结构和链式存储结构的优缺点。
答:顺序结构存储时,相邻数据元素的存放地址也相邻,即逻辑结构和存储结构是统一的,,要求内存中存储单元的地址必须是连续的。
优点:一般情况下,存储密度大,存储空间利用率高。 缺点:(1)在做插入和删除操作时,需移动大量元素;(2)由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;(3)表的容量难以扩充。
链式结构存储时,相邻数据元素可随意存放,所占空间分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。
优点:插入和删除元素时很方便,使用灵活。缺点:存储密度小,存储空间利用率低。 3.什么情况下用顺序表比链表好?
答:顺序表适于做查找这样的静态操作,链表适于做插入和删除这样的动态操作。如果线性表的变化长度变化不大,且其主要操作是查找,则采用顺序表;如果线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
4.头指针、头结点、第一个结点(或称首元结点)的区别是什么?
头结点是在链表的开始结点之前附加的一个结点;第一个结点(或称首元结点)是链表中存储第一个数据元素的结点;头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。
5.解释带头结点的单链表和不带头结点的单链表的区别。
答:带头结点的单链表和不带头结点的单链表的区别主要体现在其结构上和算法操作上。
在结构上,带头结点的单链表,不管链表是否为空,均含有一个头结点,不带头结点的单链表不含头结点。
在操作上,带头结点的单链表的初始化为申请一个头结点。无论插入或删除的位置是地第一个结点还是其他结点,算法步骤都相同。不带头结点的单链表,其算法步骤要分别考虑插入或删除的位置是第一个结点还是其他结点。因为两种情况的算法步骤不同。 1.简述栈和一般线性表的区别。
答:栈是一种先进后出的线性表,栈的插入和删除操作都只能在栈顶进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。 2.简述队列和一般线性表的区别。
队列是一种先进先出的线性表,队列的插入只能在队尾进行,队列的删除只能在队头进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。 3.链栈中为何不设头结点?
答:因为链栈只在链头插入和删除结点,不可能在链表中间插入和删除结点,算法实现很简单,所以一般不设置头结点。 4.利用一个栈,则:
(1)如果输入序列由A ,B ,C 组成,试给出全部可能的输出序列和不可能的输出序列。 (2)如果输入序列由A ,B ,C ,D 组成,试给出全部可能的输出序列和不可能的输出序列。
答:
(1)栈的操作特点是后进先出,因此输出序列有:
A 入,A 出,B 入,B 出,C 入C 出,输出序列为ABC 。 A 入,A 出,B 入,C 入,C 出,B 出,输出序列为ACB 。 A 入,B 入,B 出,A 出,C 入,C 出,输出序列为BAC 。 A 入,B 入,B 出,C 入,C 出,A 出,输出序列为BCA 。 A 入,B 入,C 入,C 出,B 出,A 出,输出序列为CBA 。
由A ,B ,C 组成的数据项,除上述五个不同的组合外,还有一个C ,A ,B 组合。但不可能先把C 出栈,再把A 出栈,(A 不在栈顶位置),最后把B 出栈,所以序列CAB 不可能由输入序列A ,B ,C 通过栈得到。
(2)按照上述方法,可能的输出序列有:
ABCD ,ABDC ,ACBD ,ACDB ,ADCB ,BACD ,BADC ,BCAD ,BCDA ,BDCA ,CBAD ,CBDA ,CDBA ,DCBA 。
不可能的输出序列有:
DABC ,ADBC ,DACB ,DBAC ,BDAC ,DBCA ,DCAB ,CDAB ,CADB ,CABD 5.用S 表示入栈操作,X 表示出栈操作,若元素入栈顺序为1234,为了得到1342出栈顺序,相应的S 和X 操作串是什么?
答:应是SXSSXSXX 。各操作结果如下: S 1入栈
X 1出栈 输出序列:1 S 2入栈 S 3入栈
X 3出栈 输出序列:13 S 4入栈
X 4出栈 输出序列:134 X 2出栈 输出序列:1342
6.有5个元素,其入栈次序为:A 、B 、C 、D 、E ,在各种可能的出栈次序中,以元素C 、D 最先的次序有哪几个?
答:从题中可知,要使C 第一个且D 第二个出栈,应是A 入栈,B 入栈,C 入栈,C 出栈,D 入栈。之后可以有以下几种情况:
(1)B 出栈,A 出栈,E 入栈,E 出栈,输出序列为:CDBAE 。 (2)B 出栈,E 入栈,E 出栈,A 出栈,输出序列为CDBEA 。 (3)E 入栈,E 出栈,B 出栈,A 出栈,输出序列为CDEBA 所以可能的次序有:CDBAE ,CDBEA ,CDEBA 7.写出以下运算式的后缀算术运算式
⑴ 3x2+x-1/x+5
⑵ (A+B)*C-D/(E+F)+G 答;对应的后缀算术运算式
⑴ 3x2^*x+1x/-5+ ⑵ AB+C*DEF+/-G+
8. 简述广义表和线性表的区别和联系。
答:广义表是线性表的的推广,它也是n(n>0)个元素a 1 ,a2…a i … an 的有限序列,其中a i
或者是原子或者是一个广义表。所以,广义表是一种递归数据结构,而线性表没有这种特性,线性表可以看成广义表的特殊情况,当a i 都是原子时,广义表退化成线性表。
1
答:二叉树的定义是递归的,所以,一棵二叉树可看作由根结点,左子树和右子树这三个基本部分组成,即依次遍历整个二叉树,又左子树或者右子树又可看作一棵二叉树并继续分为根结点、左子树和右子树三个部分….. ,这样划分一直进行到树叶结点。
(1)先序为“根左右”,先序序列为:fdbacegihl (2)中序为“左根右”,中序序列为:abcdefghij (3)后序为“左右根”,后序序列为:acbedhjigf
2.已知某二叉树的先序遍历结果是:A ,B ,D ,G ,C ,E ,H ,L ,I ,K ,M ,F 和J ,它的中序遍历结果是:G ,D ,B ,A ,L ,H ,E ,K ,I ,M ,C ,F 和J ,请画出这棵二叉树,并写出该二叉树后续遍历的结果。 1)二叉树图形表示如下:
(2)该二叉树后序遍历的结果是:G 、D 、B 、L 、H 、K 、M 、I 、E 、J 、F 、C 和A 。 3.已知一棵完全二叉树共有892个结点,求 ⑴ 树的高度 ⑵ 叶子结点数 ⑶ 单支结点数
⑷ 最后一个非终端结点的序号 答
⑴ 已知深度为k 的二叉树最多有2k-1个结点(K≥1) , 29-1
⑵ 对于完全二叉树来说,度为1的结点只能是0或1 因为n=n0+n1+n2和n0=n2+1
得:设n1=0,892=n0+0+n2=2n2+1 得n2不为整数出错
设n1=1,892=n0+1+n2=2n2+2 得n2 =445→ n0=n2+1=446 叶子结点数为446。 ⑶ 由⑵得单支结点数为1
⑷ 对于n 个结点的完全二叉树,最后一个树叶结点,即序号为n 的叶结点其双亲结点 即为最后一个非终端结点,
序号为892/2=446。
4.给出满足下列条件的所有二叉树。
(1)先序和中序相同(2)中序和后序相同(3)先序和后序相同
(1)先序序列和中序序列相同的二叉树为空树或任一结点均无左孩子的非空二叉树 (2)中序和后序序列相同的二叉树为空树或任一结点均无右孩子的非空二叉树 (3)先序和后序序列相同的二叉树为空树或仅有一个结点
5.假设通信用的报文由9个字母A 、B 、C 、D 、E 、F 、G 、H 和I 组成,它们出现的频率分别是:10、20、5、15、8、2、3、7和30。请请用这9个字母出现的频率作为权值求:
(1)设计一棵哈夫曼树;
(2)计算其带权路径长度WPL ; (3)写出每个字符的哈夫曼编码。 (1)哈夫曼树如图B-4所示。
图B-4
(2)其带权路径长度WPL 值为270。
(3)每个字符的哈夫曼编码为:A:100, B:11, C:1010, D:000, E:0010, F:10110, G:10111, H:0011, I:01
6.请根据以下带权有向图G
(1)给出从结点v1出发分别按深度优先搜索遍历G 和广度优先搜索遍历G 所得的结点序列;
(2)给出G 的一个拓扑序列;
(3)给出从结点v1到结点v8的最短路径。 答
(1)深度优先遍历:v1,v2,v3,v8,v5,v7,v4,v6 广度优先遍历:v1,v2,v4,v6,v3,v5,v7,v8
(2) G的拓扑序列为:v1,v2,v4,v6,v5,v5,v3,v5,v7,v8 (3)最短路径为:v1,v2,v5,v7,v8 7.已知无向图G 描述如下:
G=(V ,E )
V={V1,V2,V3,V4,V5}
E={(V1,V2),(V1,V4),(V2,V4),(V3,V4),(V2,V5),(V3,V4),(V3,V5)} (1)画出G 的图示;
(2)然后给出G 的邻接矩阵和邻接表; (3)写出每个顶点的度。
① g1的图示和图g1的邻接表如下图所示。
图G ② 图G 的邻接矩阵如下图所示:
0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0
图G 的邻接矩阵 图G 的邻接表
③ V1、V2、V3、V4、V5的度分别为:2,3,2,3,2
1.已知序列(70,83,100,105,10,32,7,9),请写出对此序列采用插入排序法进行升序排序时各趟的结果。
答:
原始序列:(70),83,100,65,10,32,7,9 第1趟: (70,83),100,65,10,32,7,9 第2趟:(70,83,100),65,10,32,7,9 第3趟:(65,70,83,100),10,32,7,9 第4趟:(10
,65,70,83,100),32,7,9 第5趟:(10,32,65,70,83,100),7,9 第6趟:(7,10,32,65,70,83,100),9 第7趟:(7,9,10,32,65,70,83,100) 2.已知序列(10,18,4,3,6,12,1,9,15,8),请写出对此序列采用归并排序法进行升序排序时各趟的结果。 答:
原始序列:10,18,4,3,6,12,1,9,15,8 第1趟: [10,18][ 3,4][6,12][1,9][ 8,15] 第2趟: [3,4,10,18,][ 1,6,9,12][ 8,15] 第3趟: [3,4,10,18,][ 1,6,8,9,12,15] 第4趟: [1,3,4,6,8,9,10,12,15,18]
3.已知序列(17,18,60,40,7,32,73,65,85)请给出采用冒泡排序法对该序列作升序排列时的每一趟结果。
第1趟:17,18,40,7,32,60,65,73,85
第2趟:17,18,7,32,40,60,65,73,85 第3趟:17,7,18,32,40,60,65,73,85 第4趟:7,17,18,32,40,60,65,73,85 第5趟:7,17,18,32,40,60,65,73,85
4.已知序列(503,87,512,61,908,170,897,275,653,462)请给出采用快速排序法对该序列作升序排列时的每一趟结果。
原始序列:503,87,512,61,908,170,897,275,653,462
第1趟: [462,87,275,61,170]503[897,908,653,512] 第2趟: [170,87,275,61] 462,503[897,908,653,512] 第3趟: [87,61]170[275] 462,503[897,908,653,512] 第4趟: 61 [87]170[275] 462,503[897,908,653,512]
第5趟: 61 ,87,170,[275] 462,503[897,908,653,512] 第6趟: 61 ,87,170,275,462,503[897,908,653,512] 第7趟: 61 ,87,170,275,462,503[512,653]897[908] 第8趟: 61 ,87,170,275,462,503,512,[653] 897[908] 第9趟: 61 ,87,170,275,462,503,653,897[908] 第10趟: 61 ,87,170,275,462,503,653,897,908 5.设一组记录的关键字序列为(51,85,61,43,45,49),采用堆排序算法完成以下操作:(要求小根堆,并画出中间过程) (1)以二叉树描述6个元素的初始堆
(2)以二叉树描述逐次取走堆顶元素后,经调整得到的5个元素、4个元素的堆 (1)
(2)
6.设查找表为(20,19,24,57,68,11)
(1)用冒泡对该表进行排序,要求写出每一趟的排序过程,通常对n 个元素进行冒泡排序要进行多少趟冒泡?第j 趟要进行多少次元素间的比较? (2)在排序后的有序表的基础上,画出对其进行折半查找所对应的判定树.(要求以数据元素作为树结点)
(3)求在等概率条件下, 对上述有序表成功查找的平均查找长度。 (1)原序列16 15 20 53 64 7
15 16 20 53 7 64 n-1趟 15 16 20 7 53 64 n-j 次 15 16 7 20 53 64 15 7 16 20 53 64 7 15 16 20 53 64 (2)
(3)平均查找长度=(1*1+2*2+3*3)/6=14/6
7. (1) 设有查找表{8,17,5,9,21,10,7,19,6},依次取表中数据,构造一棵二叉排序树.
(2)说明如何通过序列的二叉排序树得到相应序列的排序结果,对上述二叉排序给出中序遍历的结果. (1)
(2)
中序遍历:2,3,4,5,6,7,14,16,18
1.简述数据的逻辑结构和存储结构的区别与联系,它们如何影响算法的设计与实现?
答:若用结点表示某个数据元素,则结点与结点之间的逻辑关系就称为数据的逻辑结构。数据在计算机中的存储表示称为数据的存储结构。可见,数据的逻辑结构是反映数据之间的固有关系,而数据的存储结构是数据在计算机中的存储表示。尽管因采用的存储结构不同,逻辑上相邻的结点,其物理地址未必相同,但可通过结点的内部信息,找到其相邻的结点,从而保留了逻辑结构的特点。采用的存储结构不同,对数据的操作在灵活性,算法复杂度等方面差别较大。
2.解释顺序存储结构和链式存储结构的特点,并比较顺序存储结构和链式存储结构的优缺点。
答:顺序结构存储时,相邻数据元素的存放地址也相邻,即逻辑结构和存储结构是统一的,,要求内存中存储单元的地址必须是连续的。
优点:一般情况下,存储密度大,存储空间利用率高。 缺点:(1)在做插入和删除操作时,需移动大量元素;(2)由于难以估计,必须预先分配较大的空间,往往使存储空间不能得到充分利用;(3)表的容量难以扩充。
链式结构存储时,相邻数据元素可随意存放,所占空间分为两部分,一部分存放结点值,另一部分存放表示结点间关系的指针。
优点:插入和删除元素时很方便,使用灵活。缺点:存储密度小,存储空间利用率低。 3.什么情况下用顺序表比链表好?
答:顺序表适于做查找这样的静态操作,链表适于做插入和删除这样的动态操作。如果线性表的变化长度变化不大,且其主要操作是查找,则采用顺序表;如果线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
4.头指针、头结点、第一个结点(或称首元结点)的区别是什么?
头结点是在链表的开始结点之前附加的一个结点;第一个结点(或称首元结点)是链表中存储第一个数据元素的结点;头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。
5.解释带头结点的单链表和不带头结点的单链表的区别。
答:带头结点的单链表和不带头结点的单链表的区别主要体现在其结构上和算法操作上。
在结构上,带头结点的单链表,不管链表是否为空,均含有一个头结点,不带头结点的单链表不含头结点。
在操作上,带头结点的单链表的初始化为申请一个头结点。无论插入或删除的位置是地第一个结点还是其他结点,算法步骤都相同。不带头结点的单链表,其算法步骤要分别考虑插入或删除的位置是第一个结点还是其他结点。因为两种情况的算法步骤不同。 1.简述栈和一般线性表的区别。
答:栈是一种先进后出的线性表,栈的插入和删除操作都只能在栈顶进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。 2.简述队列和一般线性表的区别。
队列是一种先进先出的线性表,队列的插入只能在队尾进行,队列的删除只能在队头进行,而一般的线性表可以在线性表的任何位置进行插入和删除操作。 3.链栈中为何不设头结点?
答:因为链栈只在链头插入和删除结点,不可能在链表中间插入和删除结点,算法实现很简单,所以一般不设置头结点。 4.利用一个栈,则:
(1)如果输入序列由A ,B ,C 组成,试给出全部可能的输出序列和不可能的输出序列。 (2)如果输入序列由A ,B ,C ,D 组成,试给出全部可能的输出序列和不可能的输出序列。
答:
(1)栈的操作特点是后进先出,因此输出序列有:
A 入,A 出,B 入,B 出,C 入C 出,输出序列为ABC 。 A 入,A 出,B 入,C 入,C 出,B 出,输出序列为ACB 。 A 入,B 入,B 出,A 出,C 入,C 出,输出序列为BAC 。 A 入,B 入,B 出,C 入,C 出,A 出,输出序列为BCA 。 A 入,B 入,C 入,C 出,B 出,A 出,输出序列为CBA 。
由A ,B ,C 组成的数据项,除上述五个不同的组合外,还有一个C ,A ,B 组合。但不可能先把C 出栈,再把A 出栈,(A 不在栈顶位置),最后把B 出栈,所以序列CAB 不可能由输入序列A ,B ,C 通过栈得到。
(2)按照上述方法,可能的输出序列有:
ABCD ,ABDC ,ACBD ,ACDB ,ADCB ,BACD ,BADC ,BCAD ,BCDA ,BDCA ,CBAD ,CBDA ,CDBA ,DCBA 。
不可能的输出序列有:
DABC ,ADBC ,DACB ,DBAC ,BDAC ,DBCA ,DCAB ,CDAB ,CADB ,CABD 5.用S 表示入栈操作,X 表示出栈操作,若元素入栈顺序为1234,为了得到1342出栈顺序,相应的S 和X 操作串是什么?
答:应是SXSSXSXX 。各操作结果如下: S 1入栈
X 1出栈 输出序列:1 S 2入栈 S 3入栈
X 3出栈 输出序列:13 S 4入栈
X 4出栈 输出序列:134 X 2出栈 输出序列:1342
6.有5个元素,其入栈次序为:A 、B 、C 、D 、E ,在各种可能的出栈次序中,以元素C 、D 最先的次序有哪几个?
答:从题中可知,要使C 第一个且D 第二个出栈,应是A 入栈,B 入栈,C 入栈,C 出栈,D 入栈。之后可以有以下几种情况:
(1)B 出栈,A 出栈,E 入栈,E 出栈,输出序列为:CDBAE 。 (2)B 出栈,E 入栈,E 出栈,A 出栈,输出序列为CDBEA 。 (3)E 入栈,E 出栈,B 出栈,A 出栈,输出序列为CDEBA 所以可能的次序有:CDBAE ,CDBEA ,CDEBA 7.写出以下运算式的后缀算术运算式
⑴ 3x2+x-1/x+5
⑵ (A+B)*C-D/(E+F)+G 答;对应的后缀算术运算式
⑴ 3x2^*x+1x/-5+ ⑵ AB+C*DEF+/-G+
8. 简述广义表和线性表的区别和联系。
答:广义表是线性表的的推广,它也是n(n>0)个元素a 1 ,a2…a i … an 的有限序列,其中a i
或者是原子或者是一个广义表。所以,广义表是一种递归数据结构,而线性表没有这种特性,线性表可以看成广义表的特殊情况,当a i 都是原子时,广义表退化成线性表。
1
答:二叉树的定义是递归的,所以,一棵二叉树可看作由根结点,左子树和右子树这三个基本部分组成,即依次遍历整个二叉树,又左子树或者右子树又可看作一棵二叉树并继续分为根结点、左子树和右子树三个部分….. ,这样划分一直进行到树叶结点。
(1)先序为“根左右”,先序序列为:fdbacegihl (2)中序为“左根右”,中序序列为:abcdefghij (3)后序为“左右根”,后序序列为:acbedhjigf
2.已知某二叉树的先序遍历结果是:A ,B ,D ,G ,C ,E ,H ,L ,I ,K ,M ,F 和J ,它的中序遍历结果是:G ,D ,B ,A ,L ,H ,E ,K ,I ,M ,C ,F 和J ,请画出这棵二叉树,并写出该二叉树后续遍历的结果。 1)二叉树图形表示如下:
(2)该二叉树后序遍历的结果是:G 、D 、B 、L 、H 、K 、M 、I 、E 、J 、F 、C 和A 。 3.已知一棵完全二叉树共有892个结点,求 ⑴ 树的高度 ⑵ 叶子结点数 ⑶ 单支结点数
⑷ 最后一个非终端结点的序号 答
⑴ 已知深度为k 的二叉树最多有2k-1个结点(K≥1) , 29-1
⑵ 对于完全二叉树来说,度为1的结点只能是0或1 因为n=n0+n1+n2和n0=n2+1
得:设n1=0,892=n0+0+n2=2n2+1 得n2不为整数出错
设n1=1,892=n0+1+n2=2n2+2 得n2 =445→ n0=n2+1=446 叶子结点数为446。 ⑶ 由⑵得单支结点数为1
⑷ 对于n 个结点的完全二叉树,最后一个树叶结点,即序号为n 的叶结点其双亲结点 即为最后一个非终端结点,
序号为892/2=446。
4.给出满足下列条件的所有二叉树。
(1)先序和中序相同(2)中序和后序相同(3)先序和后序相同
(1)先序序列和中序序列相同的二叉树为空树或任一结点均无左孩子的非空二叉树 (2)中序和后序序列相同的二叉树为空树或任一结点均无右孩子的非空二叉树 (3)先序和后序序列相同的二叉树为空树或仅有一个结点
5.假设通信用的报文由9个字母A 、B 、C 、D 、E 、F 、G 、H 和I 组成,它们出现的频率分别是:10、20、5、15、8、2、3、7和30。请请用这9个字母出现的频率作为权值求:
(1)设计一棵哈夫曼树;
(2)计算其带权路径长度WPL ; (3)写出每个字符的哈夫曼编码。 (1)哈夫曼树如图B-4所示。
图B-4
(2)其带权路径长度WPL 值为270。
(3)每个字符的哈夫曼编码为:A:100, B:11, C:1010, D:000, E:0010, F:10110, G:10111, H:0011, I:01
6.请根据以下带权有向图G
(1)给出从结点v1出发分别按深度优先搜索遍历G 和广度优先搜索遍历G 所得的结点序列;
(2)给出G 的一个拓扑序列;
(3)给出从结点v1到结点v8的最短路径。 答
(1)深度优先遍历:v1,v2,v3,v8,v5,v7,v4,v6 广度优先遍历:v1,v2,v4,v6,v3,v5,v7,v8
(2) G的拓扑序列为:v1,v2,v4,v6,v5,v5,v3,v5,v7,v8 (3)最短路径为:v1,v2,v5,v7,v8 7.已知无向图G 描述如下:
G=(V ,E )
V={V1,V2,V3,V4,V5}
E={(V1,V2),(V1,V4),(V2,V4),(V3,V4),(V2,V5),(V3,V4),(V3,V5)} (1)画出G 的图示;
(2)然后给出G 的邻接矩阵和邻接表; (3)写出每个顶点的度。
① g1的图示和图g1的邻接表如下图所示。
图G ② 图G 的邻接矩阵如下图所示:
0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0
图G 的邻接矩阵 图G 的邻接表
③ V1、V2、V3、V4、V5的度分别为:2,3,2,3,2
1.已知序列(70,83,100,105,10,32,7,9),请写出对此序列采用插入排序法进行升序排序时各趟的结果。
答:
原始序列:(70),83,100,65,10,32,7,9 第1趟: (70,83),100,65,10,32,7,9 第2趟:(70,83,100),65,10,32,7,9 第3趟:(65,70,83,100),10,32,7,9 第4趟:(10
,65,70,83,100),32,7,9 第5趟:(10,32,65,70,83,100),7,9 第6趟:(7,10,32,65,70,83,100),9 第7趟:(7,9,10,32,65,70,83,100) 2.已知序列(10,18,4,3,6,12,1,9,15,8),请写出对此序列采用归并排序法进行升序排序时各趟的结果。 答:
原始序列:10,18,4,3,6,12,1,9,15,8 第1趟: [10,18][ 3,4][6,12][1,9][ 8,15] 第2趟: [3,4,10,18,][ 1,6,9,12][ 8,15] 第3趟: [3,4,10,18,][ 1,6,8,9,12,15] 第4趟: [1,3,4,6,8,9,10,12,15,18]
3.已知序列(17,18,60,40,7,32,73,65,85)请给出采用冒泡排序法对该序列作升序排列时的每一趟结果。
第1趟:17,18,40,7,32,60,65,73,85
第2趟:17,18,7,32,40,60,65,73,85 第3趟:17,7,18,32,40,60,65,73,85 第4趟:7,17,18,32,40,60,65,73,85 第5趟:7,17,18,32,40,60,65,73,85
4.已知序列(503,87,512,61,908,170,897,275,653,462)请给出采用快速排序法对该序列作升序排列时的每一趟结果。
原始序列:503,87,512,61,908,170,897,275,653,462
第1趟: [462,87,275,61,170]503[897,908,653,512] 第2趟: [170,87,275,61] 462,503[897,908,653,512] 第3趟: [87,61]170[275] 462,503[897,908,653,512] 第4趟: 61 [87]170[275] 462,503[897,908,653,512]
第5趟: 61 ,87,170,[275] 462,503[897,908,653,512] 第6趟: 61 ,87,170,275,462,503[897,908,653,512] 第7趟: 61 ,87,170,275,462,503[512,653]897[908] 第8趟: 61 ,87,170,275,462,503,512,[653] 897[908] 第9趟: 61 ,87,170,275,462,503,653,897[908] 第10趟: 61 ,87,170,275,462,503,653,897,908 5.设一组记录的关键字序列为(51,85,61,43,45,49),采用堆排序算法完成以下操作:(要求小根堆,并画出中间过程) (1)以二叉树描述6个元素的初始堆
(2)以二叉树描述逐次取走堆顶元素后,经调整得到的5个元素、4个元素的堆 (1)
(2)
6.设查找表为(20,19,24,57,68,11)
(1)用冒泡对该表进行排序,要求写出每一趟的排序过程,通常对n 个元素进行冒泡排序要进行多少趟冒泡?第j 趟要进行多少次元素间的比较? (2)在排序后的有序表的基础上,画出对其进行折半查找所对应的判定树.(要求以数据元素作为树结点)
(3)求在等概率条件下, 对上述有序表成功查找的平均查找长度。 (1)原序列16 15 20 53 64 7
15 16 20 53 7 64 n-1趟 15 16 20 7 53 64 n-j 次 15 16 7 20 53 64 15 7 16 20 53 64 7 15 16 20 53 64 (2)
(3)平均查找长度=(1*1+2*2+3*3)/6=14/6
7. (1) 设有查找表{8,17,5,9,21,10,7,19,6},依次取表中数据,构造一棵二叉排序树.
(2)说明如何通过序列的二叉排序树得到相应序列的排序结果,对上述二叉排序给出中序遍历的结果. (1)
(2)
中序遍历:2,3,4,5,6,7,14,16,18