1、198数据结构练习题 1一、单项选择题,在括号内填写所选择的标号(每小题 1 分,共 12 分)2. 以下说法错误的是( ) 。A. 抽象数据类型具有封装性。B. 抽象数据类型具有信息隐蔽性。C. 使用抽象数据类型的用户可以自己定义对抽象数据类型中数据的各种操作。D. 抽象数据类型的一个特点是使用与实现分离。3. 设有一个 nn 的对称矩阵 A,将其上三角部分按行存放在一个一维数组 B 中,A00存放于 B0中,那么第 i 行的对角元素 Aii存放于 B 中( )处。A. (i+3)*i/2 B. (i+1)*i/2 C. (2n-i+1)*i/2 D. (2n-i-1)*i/24. 已知单链
2、表 A 长度为 m,单链表 B 长度为 n,若将 B 联接在 A 的末尾,其时间复杂度应为( ) 。A. O(1) B. O(m) C. O(n) D. O(m+n)5. 假定一个链式队列的队头和队尾指针分别为 front 和 rear,则判断队空的条件为( )。A. front = rear B. front != NULLC. rear != NULL D. front = NULL7. 在一棵高度为 h(假定树根结点的层号为 0)的完全二叉树中,所含结点个数不小于( )。A. 2h-1 B. 2h+1 C. 2h-1 D. 2h8. 一棵树的广义表表示为 a(b,c(e,f(g),d),
3、当用左子女-右兄弟链表表示时,右指针域非空的结点个数为( )。A 1 B 2 C 3 D 49. 向具有 n 个结点的、结构均衡的二叉搜索树中插入一个元素的时间复杂度大致为( )。A. O(1) B. O(log2n ) C. O(n) D. O(nlog2n)10. 具有 n 个顶点的有向无环图最多可包含( )条有向边。An-1 Bn Cn(n-1)/2 Dn(n-1) 11. 图的广度优先搜索类似于树的( )次序遍历。A. 先根 B. 中根 C. 后根 D. 层次12. 如果将所有中国人按照生日(不考虑年份,只考虑月、日)来排序,那么使用下列排序算法中( )算法最快。A. 归并排序 B.
4、希尔排序 C. 快速排序 D. 基数排序二、填空题,在横线处填写合适内容(每小题 1 分,共 12 分)1. 数据结构的存储结构包括顺序、_、索引和散列等四种。2. 在程序运行过程中可以扩充的数组是_分配的数组。这种数组在声明它时需要使用数组指针。3. 在链表中进行插入和 操作的效率比在顺序存储结构中进行相同操作的效率高。4. 栈是一种限定在表的一端进行插入和删除的线性表,又被称为_表。6. 一棵树的广义表表示为 a(b(c,d(e,f),g(h),i(j,k(x,y),结点 f 的层数为_。假定树根结点的层数为 0。7. 一棵树按照左子女-右兄弟表示法转换成对应的二叉树,则该二叉树中树根结点
5、肯定没有_子女。1998. 向一棵二叉搜索树中插入一个元素时,若元素的值小于根结点的值,则应把它插入到根结点的_上。 9. 设图 G=(V,E),V=1,2,3,4, E=,,从顶点 1 出发,对图 G 进行广度优先搜索的序列有_种。10. 每次直接或通过基准元素间接比较两个元素,若出现逆序排列就交换它们的位置,这种排序方法叫做_排序 11. 快速排序在平均情况下的空间复杂度为_ 三、判断题,在每小题前面打对号表示正确或打叉号表示失败(每小题 1 分,共 10 分)1. 数据的逻辑结构是指各数据元素之间的逻辑关系,是用户根据应用需要建立的。2. 顺序表和一维数组一样,都可以按下标随机(或直接)
6、访问。3. 在一个顺序存储的循环队列中, 队头指针指向队头元素的后一个位置4. 用非递归方法实现递归算法时一定要使用递归工作栈。5. 在一棵二叉树中,假定每个结点只有左子女,没有右子女,对它分别进行中序遍历和后序遍历,则具有相同的结果。6. 在顺序表中进行顺序搜索时,若各元素的搜索概率不等,则各元素应按照搜索概率的降序排列存放,则可得到最小的平均搜索长度 7. 在二叉搜索树中,若各结点的搜索概率不等,使得搜索概率越小的结点离树根越近,则得到的是最优二叉搜索树。8. 对于 AOE 网络,加速任一关键活动都能使整个工程提前完成。9. 直接选择排序是一种稳定的排序方法。10. 闭散列法通常比开散列法
7、时间效率更高。 四、运算题(前 2 小题,每小题 6 分,后 3 小题,每小题 8 分,共 36 分)1. 设有一个二维数组 A1020,按行存放于一个连续的存储空间中,A00的存储地址是200,每个数组元素占 1 个存储字,则 A62的存储字地址是多少。A62的存储字地址:2. 已知一棵二叉树的中序和后序序列如下,求该二叉树的高度(假定空树的高度为-1)和度为 2、度为 1 及度为 0 的结点个数。中序序列:c,b,d,e,a,g,i,h,j,f后序序列:c,e,d,b,i,j,h,g,f,a 高度: 度为 2 的结点数:度为 1 的结点数: 度为 0 的结点数:3. 假定一组记录为(36,
8、75,83,54,12,67,60,40),将按次序把每个结点插入到初始为空的一棵AVL 树中,请回答在插入时需进行“左单旋转” 、 “右单旋转” 、 “先左后右双旋转” 、 “先右后左双旋转” , “不调整”的结点数各是多少?4.有一份电文中共使用 5 个字符 i j k l p,它们出现频率依次为0.25、0.05、0.48、0.07、0.15,试画出对应的 Huffman 树(按左子树根结点的权小于等于右子树根结点的权的次序构造)并求出每个字符的 Huffman 编码及树的带权路径长度 WPL。 数据结构练习题 2一、选择题(每小题 1 分,共 10 分)1. 在一个长度为 n 的顺序表
9、的任一位置插入一个新元素的渐进时间复杂度为( ) 。A. O(n) B. O(n/2) C. O(1) D. O(n2)2. 带头结点的单链表 first 为空的判定条件是:A. first = NULL; B. first-link = NULL;200C. first-link = first; D. first != NULL;3. 当利用大小为 n 的数组顺序存储一个队列时,该队列的最大长度为( ) 。A. n-2 B. n-1 C. n D. n+14. 在系统实现递归调用时需利用递归工作记录保存实际参数的值。在传值参数情形,需为对应形式参数分配空间,以存放实际参数的副本;在引用参数
10、情形,需保存实际参数的( ) ,在被调用程序中可直接操纵实际参数。A. 空间 B. 副本 C. 返回地址 D. 地址5. 在一棵树中, ( )没有前驱结点。A. 分支结点 B. 叶结点 C. 树根结点 D. 空结点6. 在一棵二叉树的二叉链表中,空指针域数等于非空指针域数加( ) 。A. 2 B. 1 C. 0 D. 17. 对于长度为 9 的有序顺序表,若采用折半搜索,在等概率情况下搜索成功的平均搜索长度为( )的值除以 9。A. 20 B. 18 C. 25 D. 228. 在有向图中每个顶点的度等于该顶点的( ) 。A. 入度 B. 出度C. 入度与出度之和 D. 入度与出度之差9. 在
11、基于排序码比较的排序算法中, ( )算法的最坏情况下的时间复杂度不高于 O(nlog2n)。A. 起泡排序 B. 希尔排序 C. 归并排序 D. 快速排序10. 当 的值较小时,散列存储通常比其他存储方式具有( )的查找速度。A. 较慢 B. 较快 C. 相同二、填空题(每小题 1 分,共 10 分)1. 二维数组是一种非线性结构,其中的每一个数组元素最多有_个直接前驱(或直接后继) 。2. 将一个 n 阶三对角矩阵 A 的三条对角线上的元素按行压缩存放于一个一维数组 B 中,A00存放于 B0中。对于任意给定数组元素 BK,它应是 A 中第_行的元素。3. 链表对于数据元素的插入和删除不需移
12、动结点,只需改变相关结点的_域的值。4. 在一个链式栈中,若栈顶指针等于 NULL 则为_ 。5. 主程序第一次调用递归函数被称为外部调用,递归函数自己调用自己被称为内部调用,它们都需要利用栈保存调用后的_地址。6. 在一棵树中,_结点没有后继结点。7. 一棵树的广义表表示为 a (b (c, d (e, f), g (h) ), i (j, k (x, y) ) ),结点 f 的层数为_。假定根结点的层数为 0。8. 在一棵 AVL 树(高度平衡的二叉搜索树)中,每个结点的左子树高度与右子树高度之差的绝对值不超过_。9. n (n0) 个顶点的无向图最多有_条边,最少有_条边。三、判断题(每
13、小题 1 分,共 10 分)1. 数组是一种复杂的数据结构,数组元素之间的关系既不是线性的也不是树形的。2. 链式存储在插入和删除时需要保持物理存储空间的顺序分配,不需要保持数据元素之间的逻辑顺序。3. 在用循环单链表表示的链式队列中,可以不设队头指针,仅在链尾设置队尾指针。4. 通常递归的算法简单、易懂、容易编写,而且执行的效率也高。5. 一个广义表的表尾总是一个广义表。2016. 当从一个小根堆(最小堆)中删除一个元素时,需要把堆尾元素填补到堆顶位置,然后再按条件把它逐层向下调整,直到调整到合适位置为止。7. 对于一棵具有 n 个结点,其高度为 h 的二叉树,进行任一种次序遍历的时间复杂度
14、为 O(h)。8. 存储图的邻接矩阵中,邻接矩阵的大小不但与图的顶点个数有关,而且与图的边数也有关。9. 直接选择排序是一种稳定的排序方法。四、运算题(每小题 8 分,共 40 分)1. 设有一个 1010 的对称矩阵 A,将其下三角部分按行存放在一个一维数组 B 中,A00存放于 B0中,那么 A85存放于 B 中什么位置。2. 这是一个统计单链表中结点的值等于给定值 x 的结点数的算法,其中 while 循环有错,请重新编写出正确的 while 循环。int count ( ListNode * Ha, ElemType x ) / Ha 为不带头结点的单链表的头指针int n = 0;w
15、hile ( Ha-link != NULL ) Ha = Ha-link; if ( Ha-data = x ) n+;return n;3. 已知一棵二叉树的前序和中序序列,求该二叉树的后序序列。前序序列:A, B, C, D, E, F, G, H, I, J中序序列:C, B, A, E, F, D, I, H, J, G后序序列:4. 设有一组关键字(19,01,23,14,55,20,84,27,68,11,10,77),采用哈希函数: H(key)=key%13,采用开放地址法的线性探测再散列方法解决冲突,试在 018 的散列地址空间中对该序列构造哈希表。 5.已知 AOE 网如
16、图:求出关键路径。 9a1=3 a2=6 a5=2 a6=3a3=4 a7=5a4=4 a8=3a9=10 a10=6五、算法分析题(每小题 8 分,共 24 分)1阅读下列算法,并补充所缺语句void purge_linkst ( ListNode * ElemType temp;p = la-link;while (p != NULL ) q = p;temp=p-data ;p = p-link;if ( p != NULL else while ( p != NULL p = p-link;delete t;q-link=p;2. 下面给出一个排序算法,它属于数据表类的成员函数,其中
17、currentSize 是数据表实例的当前长度,Vector 是存放数据表元素的一维数组。template void dataList : unknown ( ) T temp; int i, j, n = currentSize;for ( i = 1; i = 0; j- )if ( temp.key data = BT-data;pt-rightChild = BinTreeSwopX ( BT-leftChild );pt-lefthild = BinTreeSwopX ( BT-rightChild );203return pt;六、算法设计题(6 分)已知二叉树中的结点类型用 Bi
18、nTreeNode 表示,被定义为 :struct BTreeNode char data; BinTreeNode *leftChild, *rightChild; ;其中 data 为结点值域,leftChild 和 rightChild 分别为指向左、右子女结点的指针域,根据下面函数声明编写出求一棵二叉树中结点总数的算法,该总数值由函数返回。假定参数 BT 初始指向这棵二叉树的根结点。int BTreeCount ( BinTreeNode* BT );数据结构习题 2 参考答案一、选择题(每小题 1 分,共 10 分)1. A 2. B 3. B 4. D 5. C 6. A 7. C
19、 8. C9. C 10. B二、填空题(每小题 1 分,共 10 分)1. 2 2. (K+1)/3 3. 指针 4. 空栈5. 返回 6. 叶子 7. 3 8. 19. n(n-1)/2, 0 10. 稠密,稀疏第 9 和 10 小题中有一空错则 1 分全扣。三、判断题(每小题 1 分,共 10 分)1. 对 2. 错 3. 对 4. 错 5. 对 6. 对 7. 错 8. 错9. 错 10. 错四、运算题(每小题 8 分,共 40 分)1. 根据题意,矩阵 A 中当元素下标 I 与 J 满足 IJ 时,任意元素 AIJ在一维数组 B 中的存放位置为 I * (I + 1) / 2 + J
20、,因此,A85在数组 B 中位置为8 * (8 + 1) / 2 + 5 = 41。2. while ( Ha != NULL ) if ( Ha-data = x ) n+;Ha = Ha-link;3. 后序序列:C, B, F, E, I, J, H, G, D, A五、算法分析题(每小题 8 分,共 24 分)1. p-data temp /4 分p-data = temp /4 分2. 算法功能及执行效率(1) 该算法的功能是直接插入排序。(4 分)(2) n-1 0 (2 分 2 分)3. 算法功能:生成一棵新二叉树并返回树根指针,该二叉树是已知二叉树 BT 中所有结点的左、右子树
21、交换的结果。 六、6 分,请根据编程情况酌情给分。204int BTreeCount ( BinTreeNode* BT ) if ( BT = NULL ) return 0; /2 分else return BTreeCount ( BT-leftChild ) + BTreeCount ( BT-rightChild ) + 1; /4 分数据结构习题 3一、选择题(每小题 1 分,共 10 分)1、在一个长度为 n 的顺序表的表尾插入一个新元素的渐进时间复杂度为( )AO (n) BO (1) CO (n2 ) DO (log2 n)2、设单链表中结点的结构为(data , link)
22、 。已知指针 q 所指结点是指针 p 所指结事业的直接前驱,若在*q 与*p 之间插入结点*s,则应执行下列哪一个操作?As -link= p-link ; p-link=s Bq-link=s ;s-link=pCp-link=s-link ;s-link=p Dp-link=s ;s-link=q 3、若让元素 1,2,3 依次进栈,则出栈次序不可能出现( )种情况。A3,2,1 B2,1,3 C3,1,2 D1,3,24、一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来看,通常递归过程比非递归过程( )A较快 B较慢 C相同5、树中所有结点的度等于所有结点数加(
23、 )A0 B1 C-1 D26、在一棵具有 n 个结点的二叉树中,所有结点的空子树个数等于( )An Bn-1 Cn+1 D2*n7、对长度为 n 的有序单链表,若搜索每个元素的概率相等,则顺序搜索到表中任一元素的平均搜索长度为( )An/2 B(n+1)/2 C(n 1)/2 Dn/48、在无向图中定义顶点 V i 与 Vj 之间的路径为从 V i 到达 Vj 的一个( )A顶点序列 B边序列 C权值总和 D边的条数 9、如果只想得到 1024 个元素组成的序列中的前 5 个最小元素,那么用( )方法最快。A起泡排序 B快速排序 C堆排序 D直接选择排序10、设有一个含 200 个表项的散列
24、表,用线性探查法解决冲突,按关键码查询时找到一个表项的平均探查次数不超过 1.5,则散列表项应能够至少容纳( )个表项。(设搜索成功的平均搜索长度为 Snl=1+1/(1-)/2 其中 为装填因子)A400 B526 C624 D676二、填空题(每小题 1 分,共 10 分)11、在程序运行过程中不能扩充的数组是 分配的数组。这种数组在声明它时必须指定它的大小。12、将一个 n 阶三对角矩阵 A 的三条对角线上的元素按行压缩存放于一个一维数组 B 中,A00存放于 B0中。对于任意给定数组元素 A I J ,如果它能够在数组 B 中找到,则它应在 位置。 13、链表适用于 查找。14、队列的
25、插入操作在 进行,删除操作在 进行。15、设有一个顺序栈 S,元素 S1,S2 ,S3,S4,S5,S6 依次进栈,如果 6 个元素的出栈顺序为S2,S3,S4, S6,S5,S1 ,则顺序栈的容量至少应为 20516、通常程序在调用另一个程序时,都需要使用一个 来保存被调用程序内分配的局部变量、形式参数的存储空间以及返回地址。17、广义表 A(a,b,c) , (d,e,f) )的表尾为 。18、在一棵树中, 结点没有前驱结点。19、一棵树的广义表表示为 a(b(c,d(e ,f ) ,g(h) ) ,I(j,k(x,y) ) ) ,结点 k 的所有祖先的结点数为 个。20、根据一组记录(5
26、6,42,50,64,48)依次插入结点生成一棵 AVL 树(高度平衡的二叉搜索树)时,当插入到值为 的结点时需要进行旋转调整。三、判断题(每小题 1 分,共 10 分)21、二维数组可以视为数组元素为一维数组的一维数组。 ( )22、链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,通常存储器中还有空闲存储空间,就不会产生存储溢出的问题。 ( )23、在用单链表表示的链式队列中,队头在链表的链尾位置。 ( )24、凡是递归定义的数据结构都可以用递归算法来实现它的操作。 ( )25、当向一个小根堆(最小堆)中插入一个具有最小值的元素时,该元素需要逐层向上调整,直到被调整到堆顶位置为止
27、。 ( )26、对于一棵具有 n 个结点,其高度为 h 的二叉树,进行任一种次序遍历的时间复杂度为 O(n) 。( ) 。27、进行折半搜索的表必须是顺序存储的有序表。 ( )28、一棵 m 阶 B 树中每个结点最多有 m 个关键码,最少有 2 个关键码。 ( )29、在散列法中采取开散列(链地址)法来解决冲突时,其装载因子的取值一定在(0,1)之间。( )30、一棵 3 阶 B 树是平衡的 3 路搜索树,反之,一棵平衡的 3 路搜索树是 3 阶 B 树。 ( )四、运算题(每小题 8 分,共 40 分)1、对于一个 nn 的矩阵 A 的任一矩阵元素 aIj,按行存储时和按列存储时的地址之差是
28、多少。(若设两种存储的开始存储地址 LOC(0,0)及元素所占存储单元 d 相同)2、已知一棵二叉树的中序和前序序列如下,求该二叉树的后序序列。中序序列:c,b,d,e ,a , g,I ,h,j ,f前序序列:a,b,c ,d,e , f,g,h,I,j后序序列:3、假定一组数据对象为(40,28,16,56,50,32,30,63) ,按次序插入每个对象生成一棵AVL 树(高度平衡的二叉搜索树) ,根据插入过程填写下表,在相应位置填写所需要的调整类型:“左单旋转” 、 “右单旋转” 、 “先左后右双旋转” 、 “先右后左双旋转” ,若不需要旋转则填写“无” 。数据:调整:40 28 16
29、56 50 32 30 63五、算法分析题(每小题 8 分,共 24 分)1、设顺序表 SeqList 具有下列操作:int Length ( ) const ; /计算表长度T Remove ( ) ; /删除当前表项,置下一表项为当前表项T First ( ) ; /取表中第一个表项的值,并把它置为当前表项T Next ( ) ; /取当前表项的后继表项的值,并把该后继表项置为当前表项试针对下面所给算法,回答下列问题:(1)说明若顺序表中存放的数据为29,38,47,16,95 ,64,73,83,51,10,0,26 ,表的长206度为 12,参数值 s =10,t =30,写出执行算法后得到的顺序表。(2)说明该算法的功能。# include # include “SeqList .h”template void unknown (SeqList *L , T s ,T t )if ( ! L-Length ( ) |s= t ) cerrFirst ( );While (ILength( )If(temp =s Else temp = L- Next( ); I+ ;