1、数据结构练习题19页word资料数据结构练习题:1下面关于线性表的叙述错误的是( D )。(A) 线性表采用顺序存储必须占用一片连续的存储空间 (B) 线性表采用链式存储不必占用一片连续的存储空间(C) 线性表采用链式存储便于插入和删除操作的实现(D) 线性表采用顺序存储便于插入和删除操作的实现2设哈夫曼树中的叶子结点总数为m,若用二叉链表作为存储结构,则该哈夫曼树中总共有(B )个空指针域。 (A) 2m-1 (B) 2m (C) 2m+1 (D) 4m3设顺序循环队列Q0:M-1的头指针和尾指针分别为F和R,头指针F总是指向队头元素的前一位置,尾指针R总是指向队尾元素的当前位置,则该循环队
2、列中的元素个数为(C )。 (A) R-F (B) F-R (C) (R-F+M)M (D) (F-R+M)M4设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为(A )。 (A) BADC (B) BCDA (C) CDAB (D) CBDA5设某完全无向图中有n个顶点,则该完全无向图中有(A )条边。 (A) n(n-1)/2 (B) n(n-1) (C) n2 (D) n2-16设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C )。 (A) 9 (B) 10 (C) 11 (D) 127 在数据结构中,从逻辑上可以把数据结构分为 ( D
3、) A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.内部结构和外部结构 D. 线性结构和非线性结构 8 已知图的邻接表如下所示,根据算法,则从顶点V0出发按广度优先遍历的结点序列是(A )A0 3 2 1 B. 0 1 2 3 C. 0 1 3 2 D. 0 3 1 29 若进栈序列为a,b,c,d,e,则栈的不可能的输出序列是 (B ) A. edcba B. dceab C. decba D. abcde 10把一棵树转换为二叉树后,这棵二叉树的形态是( A )。A.唯一的 B.有多种C.有多种,但根结点都没有左孩子 D.有多种,但根结点都没有右孩子11.为查找某一特定单词在文本中出现
4、的位置,可应用的串运算是(D ) A.插入 B.删除 C.串联接 D.子串定位12.ALV树是一种平衡的二叉树,树中任一结点的(B ) A.左、右子树的高度均相同 B.左、右子树高度差的绝对值不超过1 C.左子树的高度均大于右子树的高度 D.左子树的高度均小于右子树的高度 13.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为(C ) A.顺序表 B.用头指针表示的单循环链表 C.用尾指针表示的单循环链表 D.单链表14. 二叉树是非线性数据结构,所以( C )。.它不能用顺序存储结构存储; B.它不能用链式存储结构存储; C.顺序存储结构和链式存储结构都能存储; D.顺序存储结
5、构和链式存储结构都不能使用15. 用邻接表表示图进行广度优先遍历时,通常是采用(B )来实现算法的。A栈 B. 队列 C. 树 D. 图16数据的最小单位是(A )。 (A) 数据项 (B) 数据类型 (C) 数据元素 (D) 数据变量17设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C )。 (A) 9 (B) 10 (C) 11 (D) 1218函数substr(“DATASTRUCTURE”,5,9)的返回值为(A )。 (A) “STRUCTURE” (B) “DATA” (C) “ASTRUCTUR” (D) “DATASTRUCTURE”19设某完全无向图中有n个顶点,则
6、该完全无向图中有(A )条边。 (A) n(n-1)/2 (B) n(n-1) (C) n2 (D) n2-120 深度为k的完全二叉树中最少有(B )个结点。 (A) 2k-1-1 (B) 2k-1 (C) 2k-1+1 (D) 2k-121设连通图G中的边集E=(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c),则从顶点a出发可以得到一种深度优先遍历的顶点序列为(B )。 (A) abedfc (B) acfebd (C) aebdfc (D) aedfcb22设输入序列是1、2、3、n,经过栈的作用后输出序列的第一个元素是n,则输出序列中第i个输出元素是(
7、C )。 (A) n-i (B) n-1-i (C) n+1-i (D) 不能确定23.为查找某一特定单词在文本中出现的位置,可应用的串运算是(D ) A.插入 B.删除 C.串联接 D.子串定位24设有序表中有1000个元素,则用二分查找查找元素X最多需要比较(B )次。 (A) 25 (B) 10 (C) 7 (D) 1 25.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为(C ) A.顺序表 B.用头指针表示的单循环链表 C.用尾指针表示的单循环链表 D.单链表26. 把一棵树转换为二叉树后,这棵二叉树的形态是(A )。A.唯一的 B.有多种C.有多种,但根结点都没有左孩
8、子 D.有多种,但根结点都没有右孩子27.已知图的邻接表如下所示,根据算法,则从顶点V0出发按广度优先遍历的结点序列是(A )A0 3 2 1 B. 0 1 2 3 C. 0 1 3 2 D. 0 3 1 228. 二叉树是非线性数据结构,所以(C )。.它不能用顺序存储结构存储; B.它不能用链式存储结构存储; C.顺序存储结构和链式存储结构都能存储; D.顺序存储结构和链式存储结构都不能使用29. 数组用来表示一个循环队列,为当前队列头元素的前一位置,为队尾元素的位置,假定队列中元素的个数小于,计算队列中元素的公式为(D )。A. rf; B.(nfr)% n; C.nrf; D.(nrf
9、)% n30. 用邻接表表示图进行广度优先遍历时,通常是采用(B )来实现算法的。A栈 B. 队列 C. 树 D. 图311for(i=1,t=1,s=0;i=n;i+) t=t*i;s=s+t;的时间复杂度为 O(n) 。32下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。void bubble(int rn)for(i=1;i=n-1; i+)for(exchange=0,j=0; jrj+1)temp=rj+1; rj+1=rj ;rj=temp;exchange=1;if (exchange=0) return;33中序遍历二叉排序树所得到的序列是 有序 序列(填有序或
10、无序)。34快速排序的最坏时间复杂度为 O(n2) ,平均时间复杂度为 O(nlog2n) 。35设某棵二叉树中度数为0的结点数为N0,度数为1的结点数为N1,则该二叉树中度数为2的结点数为 N0-1 ;若采用二叉链表作为该二叉树的存储结构,则该二叉树中共有 2N0+N1 个空指针域。1. 36设某无向图中顶点数和边数分别为n和e,所有顶点的度数之和为d,则e= d/2 。37设一组初始记录关键字序列为(55,63,44,38,75,80,31,56),则利用筛选法建立2. 的初始堆为 (31,38,54,56,75,80,55,63) 。3. 38设F和R分别表示顺序循环队列的头指针和尾指针
11、,则判断该循环队列为空的条件为 F=R 。39下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。struct recordint key; int others;int bisearch(struct record r , int k) int low=0,mid,high=n-1; while(lowk ) high=mid-1;else low=mid+1; return(0);40若顺序表每个元素长度均为5,其中第一个元素的存储地址为30,则第6个元素的存储地址为 55 。41栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为先进后出表;队列的插入和删
12、除运算分别在队列的两端进行,先进队列的元素必定先出队列,所以又把队列称为先进先出表。42顺序表中逻辑上相邻的元素的物理位置必定紧邻。单链表中逻辑上相邻的元素的物理位置不一定紧邻。(对)43设一棵完全二叉树有128个结点,则该完全二叉树的深度为8,有64个叶子结点。(对)44满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。( 对 )45设一棵二叉树的先序序列和后序序列,则能够唯一确定出该二叉树的形状。( 错 )46. 栈和链表是两种不同的数据结构。(错)47.具有12个结点的完全二叉树有5个度为2的结点。(对)48.关键路径是事件结点网络中的从源点到汇点的最短路径。(错)49. 由树转化成
13、二叉树,该二叉树的右子树不一定为空。( 错 )50.堆排序是不稳定的排序方法。(对)51调用一次深度优先遍历可以访问到图中的所有顶点。(错 )52分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。(对 )53冒泡排序在初始关键字序列为逆序的情况下执行的交换次数最多。( 对 )54已知一棵二叉树的先序序列是ABCDEFGHIJK,中序序列是CDBGFEAHJIK,请构造出该二叉树55设给定权集W=5,7,2,3,6,8,9,请构造画出关于W的一棵赫夫曼树,并求出其加权路径长度WPL。加权路径长度:WPL=2*4+3*4+5*3+6*3+7*3+8*2+9*2=10856对如下所示
14、的带权图: (1) 分别按照克鲁斯卡尔算法和普里姆算法,从顶点v1出发,生成最小生成树,按生成次序依次写出各条边;(2)画出该图最小生成树,并求出它的权值之和。57、下图所示的森林:(1) 求树(a)的先根序列和后根序列; (2) 求森林先序序列和中序序列;(3) 将此森林转换为相应的二叉树;(1) 先根序列:ABCDEF;后根序列:BDEFCA;(2) 先序序列: ABCDEFGHIJK; 中序序列:BDEFCAIJKHG(3)森林转换为相应的二叉树;58设一组初始记录关键字序列为(15,17,18,22,35,51,60),要求计算出使用折半查找查找成功时的平均查找长度。59.编写递归算法
15、,计算二叉树中叶子结点的数目。int LeafCount_BiTree(Bitree T)/求二叉树中叶子结点的数目 if(!T) return 0; /空树没有叶子 else if(!T-lchild&!T-rchild) return 1; /叶子结点 else return Leaf_Count(T-lchild)+Leaf_Count(T-rchild);/左子树的叶子数加 上右子树的叶子数 /LeafCount_BiTree 61假设正读和反读都相同的字符序列为“回文”,例如,abba和abcba是回文,abcde 和ababab则不是回文。试写一个算法判别读入的一个以为结束符的字符
16、序列是否是“回文”。int Palindrome_Test()/判别输入的字符串是否回文序列,是则返回1,否则返回0InitStack(S);InitQueue(Q);while(c=getchar()!=)Push(S,c);EnQueue(Q,c); /同时使用栈和队列两种结构while(!StackEmpty(S)Pop(S,a);DeQueue(Q,b);if(a!=b) return ERROR;return OK;/Palindrome_Test 62设计两个有序单链表的合并排序算法。void mergelklist(lklist *ha,lklist *hb,lklist *&h
17、c) lklist *s=hc=0; while(ha!=0 & hb!=0) if(ha-datadata)if(s=0) hc=s=ha; else s-next=ha; s=ha;ha=ha-next; else if(s=0) hc=s=hb; else s-next=hb; s=hb;hb=hb-next; if(ha=0) s-next=hb; else s-next=ha;63设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第4趟简单选择排序和第4趟直接插入排序后的结果。(22,40,45,48,80,78),(40,45,48,80,22,78)64
18、已知一棵二叉树的先序序列是ABCDEFGHIJK,中序序列是CDBGFEAHJIK,请构造出该二叉树65设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找(折半查找),要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。2,ASL=91*1+2*2+3*4+4*2)=25/966、已知散列函数为H(key)=key mod 7,散列表长度为7(散列地址空间为0.6),待散列序列关键字依次为:(25,48,32,50,68)。要求(1)根据以上条件构造一散列表,并用“线性探测再散列法”解决有关地址冲突(要求写出构造过程);(
19、2)若要用该散列表查找元素68,试给出所需的比较次数和依次被比较的关键字。(1)散列表如图所示:0 1 2 3 4 5 66850253248 H(25) = 25 mod 7 = 4 ; 没有地址冲突,故填入表中4号位置;H(48) = 48 mod 7 = 6 ; 没有地址冲突,故填入表中6号位置;H(32) = 32 mod 7 = 4 ; 出现地址冲突,使用线性探测:H(32) =(41)mod 7 5;没有地址冲突,故填入表中5号位置; H(50) = 50 mod 7 = 1 ; 没有地址冲突,故填入表中1号位置;H(68) = 68 mod 7 = 5 ; 出现地址冲突,使用线性
20、探测:H(68) =(51)mod 7 6;仍有地址冲突,故再次线性探测 H(68) =(52)mod 7 0;此时已没有地址冲突,故填入表中0号位置;散列表全部构造完成! /以上为注释,供参考使用!/ (2)共需要比较 3 次;依次分别和:32,48, 68 进行比较。68已知一棵二叉树的中序序列:CBEDAHGIJF ,后序序列为:CEDBHJIGFA,请画出该二叉树并写出其先序序列。69已知散列函数为H(key)=key mod 7,散列表长度为7(散列地址空间为0.6),待散列序列关键字为:(32,55,39,57,75)。要求:(1)根据以上条件构造一散列表,并用“线性探测再散列法”
21、解决有关地址冲突(要求写出构造过程);(2)若要用该散列表查找元素75,试给出所需的比较次数和依次被比较的关键字。散列表如图所示:32,55,39,57,750 1 2 3 4 5 67557393255 H(32) = 32 mod 7 = 4 ; 没有地址冲突,故填入表中4号位置;H(55) = 55 mod 7 = 6 ; 没有地址冲突,故填入表中6号位置;H(39) = 39 mod 7 = 4 ; 出现地址冲突,使用线性探测:H(39) =(41)mod 7 5;没有地址冲突,故填入表中5号位置; H(57) = 57 mod 7 = 1 ; 没有地址冲突,故填入表中1号位置;H(7
22、5) = 75 mod 7 = 5 ; 出现地址冲突,使用线性探测:H(75) =(51)mod 7 6;仍有地址冲突,故再次线性探测 H(75) =(52)mod 7 0;此时已没有地址冲突,故填入表中0号位置;散列表全部构造完成! /以上为注释,供参考使用!/ 共需要比较 3 次。 依次分别和:32,55, 75 进行比较。70希尔排序、简单选择排序、快速排序和堆排序是不稳定的排序方法, 试举例说明。【解答】 (1) 希尔排序 512 275 275* 061 增量为2 275* 061 512 275 增量为1 061 275* 275 512 (2) 直接选择排序 275 275* 5
23、12 061 i = 1 061 275* 512 275 i = 2 061 275* 512 275 i = 3 061 275* 275 512 (3) 快速排序 512 275 275* 275* 275 512 (4) 堆排序 275 275* 061 170 已经是最大堆,交换275与170 170 275* 061 275 对前3个调整 275* 170 061 275 前3个最大堆,交换275*与061 061 170 275* 275 对前2个调整 170 061 275* 275 前2个最大堆,交换170与061 061 170 275* 275 71. 设给定一个权值集合
24、W=(3,5,7,9,11),要求根据给定的权值集合构造一棵哈夫曼树并计算哈夫曼树的带权路径长度WPL。73设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找(折半查找),要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。2,ASL=91*1+2*2+3*4+4*2)=25/974已知二叉树的前序遍历序列是AEFBGCDHIKJ,中序遍历序列是EFAGBCHKIJD,画出此二叉树,并画出它的后序和中序线索二叉树。后序线索二叉树如下图:中序线索自己画75请画出下图的邻接矩阵和邻接表。(1)邻接矩阵:(2)邻接表:78设一组
25、初始记录关键字序列为(15,17,18,22,35,51,60),要求计算出使用折半查找查找成功时的平均查找长度ASL=(1*1+2*2+3*4)/7=17/779已知一棵二叉树的中序序列:CBEDAHGIJF ,后序序列为:CEDBHJIGFA,请画出该二叉树并写出其先序序列。先序序列为:ABCDEFGHIJ 80设一组初始记录关键字序列为(45,80,48,40,22,78),则分别给出第4趟简单选择排序和第4趟直接插入排序后的结果。(22,40,45,48,80,78),(40,45,48,80,22,78)81、编写算法实现将单链表就地逆置,即不另外开辟结点空间,而将链表元素翻转顺序。
26、思路:从链上依次取下结点,按照逆序建表的方法重新建表。void Reverse( LinkList &L ) p = L-next; / 原链表 L-next = NULL; / 新表(空表) while ( p ) / 从原链表中取下结点s s = p; p = p-next; / 插入L新表表头 s-next = L-next; L-next = s;82、设计在链式结构上实现简单选择排序算法。 lklist *p,*q,*s; int min,t; if(head=0 |head-next=0) return; for(q=head; q!=0;q=q-next) min=q-data;
27、 s=q; for(p=q-next; p!=0;p=p-next) if(minp-data)min=p-data; s=p; if(s!=q)t=s-data; s-data=q-data; q-data=t;83 二叉树结点定义如下:typedef struct BiTNode char data; struct BiTNode *lchild, *rchild; BiTNode,*BiTree; 请用递归的方法设计算法,先序、中序、后序遍历各结点输出结点值。Status Preorder (BiTree T)(5分) / 先序遍历二叉树 if (T) visit(T-data); /
28、访问结点 Inorder (T-lchild, visit); / 遍历左子树 Inorder (T-rchild, visit);/ 遍历右子树Status Inorder (BiTree T)(5分) / 中序遍历二叉树 if (T) Inorder (T-lchild, visit); / 遍历左子树 visit(T-data); / 访问结点 Inorder (T-rchild, visit);/ 遍历右子树Status Postorder (BiTree T)(5分) / 后序遍历二叉树 if (T) Inorder (T-lchild, visit); / 遍历左子树 Inorder (T-rchild, visit);/ 遍历右子树 visit(T-data); / 访问结点供同学们练习用,考试以最后一次课讲课为主,如:二叉排序树,练习题没有出,但考试是有的。练习题中给出的答案,只供参考,因为很多题是没有标准答案的。59. #includeusing namespace std;typedef struct TNode/二叉树结构 char nodeValue;/结点的值 TNode* left;/左子树 TNode* right;/右子树 *BiTree;void CreateBiTree(BiTree &T)/中序遍历方式创建二叉树
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1