数据结构练习册A.docx
《数据结构练习册A.docx》由会员分享,可在线阅读,更多相关《数据结构练习册A.docx(159页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、习题册数据结构强化班专属资料 提供全程答案解析2019 年 408 真题【数据结构部分】一、单项选择题:下列每题给出的四个选项中,只有一个选项符合试题要求。1设 n 是描述问题规模的非负整数,下列程序段的时间复杂度是x=0;while(n=(x+1)*(x+1)x=x+l;AO(log n)BO(n1/2)C O(n)DO(n2)2若将一棵树 T 转化为对应的二叉树 BT,则下列对 BT 的遍历中,其编历序列与 T 的后根遍历序列相同的是A先序遍历B中序遍历C后序遍历D按层遍历3对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是A56B57C58D60
2、4在任意一棵非空平衡二叉树(AVL 树)T1中,删除某结点 v 之后形成平衡二叉树 T2,再将 v 插入 T2形成平衡二叉树 T3。下列关于 T1与 T3的叙述中,正确的是(I)若 v 是 T1的叶结点,则 T1与 T3可能不相同(II)若 v 不是 T1的叶结点,则 T1与 T3一定不相同(III)若 v 不是 T1的叶结点,则 T1与 T3一定相同A仅B仅C仅、D仅、5下图所示的 AOE 网表示一项包含 8 个活动的工程活动 d 的最早开始时间和最迟开始时间分别是A3 和 7B12 和 12C12 和 14D15 和 156用有向无环图描述表达式(x+y)*(x+y)/x),需要的顶点个数
3、至少是A5B6C8D97选择一个排序算法时,除算法的时空效率外,下列因素中,还需要考虑的是数据的规模数据的存储方式算法的稳定性数据的初始状态A仅B仅、C仅、D、8现有长度为 11 且初始为空的散列表 HT,散列函数是 H(key)=key%7,采用线性探查(线性探测再散列)法解决冲突将关键字序列 87,40,30,6,11,22,98,20 依次5插入到 HT 后,HT 查找失败的平均查找长度是A4B525C6D6299设主串 T=“abaabaabcabaabc”模式串 S=“abaabc”,采用 KMP 算法进行模式匹配,到匹配成功时为止,在匹配过程中进行的单个字符间的比较次数是A9B10
4、C12D1510 排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是A5,2,16,12,28,60,32,72B2,16,5,28,12,60,32,72C2,12,16,5,28,32,72,60D5,2,12,28,16,32,72,6011设外存上有 120 个初始归并段,进行 12 路归并时,为实现最佳归并,需要补充的虚段个数是A1B2C3D4二、综合应用题41(13 分)设线性表 L=(a1,a,a3,an-2,an-1,an)采用带头结点的单链表保存,链表中结点定义如下:typedef struct nodeint dat
5、a;struct node*next;NODE;请设计一个空间复杂度为 O(1)且时间上尽可能高效的算法,重新排列 L 中的各结点,得到线性表 L=(a1,an,a2,an-1,a3,an-2,)。要求:(1)给出算法的基本设计思想(2)根据设计思想,采用 C 或 C+语言描述算法,关键之处给出注释。(3)说明你所设计的算法的时间复杂度。42(10 分)请设计一个队列,要求满足:初始时队列为空;入队时,允许增加队列占用空间;出队后,出队元素所占用的空间可重复使用,即整个队列所占用的空间只增不减;入队操作和出队操作的时间复杂度始终保持为 O(1)。请回答下列问题:(l)该队列应该选择链式存储结构
6、,还是顺序存储结构?(2)画出队列的初始状态,并给出判断队空和队满的条件(3)画出第一个元素入队后的队列状态。(4)给出入队操作和出队操作的基本过程。6参考答案:一、单项选择题1B2B3C4A5C6A7D8C9B10D11B41【答案要点】(l)算法的基本设计思想:算法分 3 步完成。第 1 步,采用两个指针交替前行,找到单链表的中间结点;第 2步,将单链表的后半段结点原地逆置;第 3 步,从单链表前后两段中依次各取一个结点,按要求重排。(2)算法实现:void change_list(NODE*h)NODE*p,*q,*r,*s;p=q=h;while(q-next!=NULL)/寻找中间结
7、点 p=p-next;/p 走一步q=q-next;if(q-nexl!=NULL)q=q-next;/q 走两步q=p-next;/p 所指结点为中间结点,q 为后半段链表的首结点p-next=NULL;while(q!=NULL)/将链表后半段逆置 r=q-next;q-next=p-next;p-next=q;q=r;s=h-next;/s 指向前半段的第一个数据结点,即插入点q=p-next;/q 指向后半段的第一个数据结点p-next=NULL;while(q!=NULL)/将链表后半段的结点插入到指定位置r=q-nex1;/r 指向后半段的下一个结点q-next=s-next;/将
8、 q 所指结点插入到 s 所指结点之后s-next=q;s=q-next;/s 指向前半段的下一个插入点q=r;(3)算法的时间复杂度:参考答案的时间复杂度为 O(n)。42【答案要点】(l)采用链式存储结构(两段式单向循环链表),队头指针为 front,队尾指针为 rear。(2)初始时,创建只有一个空闲结点的两段式单向循环链表,头指针 front 与尾指针7rear 均指向空闲结点。如下图所示。队空的判定条件:front=rear。队满的判定条件:front=rear-next。(3)插人第一个元素后的队列状态:(4)操作的基本过程:2018 年 408 真题【数据结构部分】一、单项选择题
9、:下列每题给出的四个选项中,只有一个选项符合试题要求。1若栈 S1 中保存整数,栈 S2 中保存运算符,函数 F()依次执行下述各步操作:(1)从 S1 中依次弹出两个操作数 a 和 b;(2)从 S2 中弹出一个运算符 op;(3)执行相应的运算 bop a;(4)将运算结果压人 S1 中。假定 S1 中的操作数依次是 5,8,3,2(2 在栈顶),S2 中的运算符依次是*,-,+(+在栈顶)。调 用 3 次 F()后,S1 栈顶保存的值是。A-15B15C-20D202现有队列 Q 与栈 S,初始时 Q 中的元素依次是 1,2,3,4,5,6(1 在队头),S 为空。若仅允 许下列 3 种
10、操作:出队并输出出队元素;出队并将出队元素人栈;出栈并输出出栈元素,则不能得到的输出序列是。A1,2,5,6,4,3B2,3,4,5,6,1C3,4,5,6,1,2D6,5,4,3,2,13设有一个 1212 的对称矩阵 M,将其上三角部分的元素 mi,j(1ij12)按行优先存人 C 语言的一维数组 N 中,元素 m6,6 在 N 中的下标是。8入队操作若(front=rear-next)/队满则在 rear 后面插入一个新的空闲结点;入队元素保存到 rear 所指结点中;rear=rear-next;返回。出队操作若(front=rear)/队空则出队失败,返回;取 front 所指结点中
11、的元素 e;fromt=front-next;返回e。A50B51C55D664设一棵非空完全二叉树 T 的所有叶结点均位于同一层,且每个非叶结点都有 2 个子结点。若 T 有 k 个叶结点,则 T 的结点总数是。A2k-1B2kC?2D2?15已知字符集a,b,c,d,e,f,若各字符出现的次数分别为 6,3,8,2,10,4,则对应字符集中各字符的哈夫曼编码可能是。A00,1011,01,1010,11,100B00,100,110,000,0010,01C10,1011,11,0011,00,010D0011,10,11,0010,01,0006已知二叉排序树如下图所示,元素之间应满足的
12、大小关系是。Ax1x2x5Bx1x4x5Cx3x5x4Dx4x3x57下列选项中,不是如下有向图的拓扑序列的是。A1,5,2,3,6,4B5,1,2,6,3,4C5,1,2,3,6,4D5,2,1,6,3,48高度为 5 的 3 阶 B 树含有的关键字个数至少是。A15B31C62D2429现有长度为 7、初始为空的散列表 HT,散列函数 H(k)=k%7,用线性探测再散列法解 决冲突。将关键字 22,43,15 依次插人到 HT 后,查找成功的平均查找长度是。A1.5B1.6C2D310对初始数据序列(8,3,9,11,2,1,4,7,5,10,6)进行希尔排序。若第一趟排序结果为(1,3,
13、7,5,2,6,4,9,11,10,8),第二趟排序结果为(1,2,6,4,3,7,5,8,11,10,9),则两趟排序采用的 增量(间隔)依次是。A3,1B3,2C5,2D5,311在将数据序列(6,1,5,9,8,4,7)建成大根堆时,正确的序列变化过程是。个数是9A.6,1,7,9,8,4,56,9,7,1,8,4,59,6,7,1,8,4,59,8,7,1,6,4,5B.6,9,5,1,8,4,76,9,7,1,8,4,59,6,7,1,8,4,59,8,7,1,6,4,5C.6,9,5,1,8,4,79,6,5,1,8,4,79,6,7,1,8,4,59,8,7,1,6,4,5D.6
14、,1,7,9,8,4,5 7,1,6,9,8,4,5 7,9,6,1,8,4,5 9,7,6,1,8,4,5 9,8,6,1,7,4,5二、综合应用题41(13 分)给定一个含 n(n1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数 组中未出现的最小正整数。例如,数组-5,3,2,3中未出现的最小正整数是 1;数组1,2,3中未出 现的最小正整数是 4。要求:(1)给出算法的基本设计思想。(2)根据设计思想,采用 C 或 C+语言描述算法,关键之处给出注释。(3)说明你所设计算法的时间复杂度和空间复杂度。42(12 分)拟建设一个光通信骨干网络连通 BJ、CS、XA、QD、JN、N
15、J、TL 和 WH 等 8 个城市,题 42 图中无向边上的权值表示两个城市间备选光缆的铺设费用。请回答下列问题。(1)仅从铺设费用角度出发,给出所有可能的最经济的光缆铺设方案(用带权图表示),并计算相应方案的总费用。(2)题 42 图可采用图的哪一种存储结构?给出求解问题(1)所使用的算法名称10参考答案:一、单项选择题1B2C3A4A5A6C7D8B9C10D11A41【答案要点】(l)算法的基本设计思想:设要查找的数组中未出现的最小正整数为 K。K 取值范围之内是1,n+1。采用类似计数排序的思想分配一个数组 Bn,用来标记 A 中是否出现了 1n 之间的正整数。从左至右依次扫描数组元素
16、 Ai 并标记数组 B。若 Ai 是负数、零或是大于 n,则忽略该值,否则根据计数排序的思想将 BAi-1置为 1。标记完毕,遍历数组 B,查找第一个值为 0 的元素,其下标+1 即为目标元素 K;找不到 0 时,K=n+1。(2)算法实现:int findMissMin(int A,int n)int i,*B;/标记数组B=(int*)malloc(sizeof(int)*n);/分配空间memset(B,0,sizeof(int)*n);/赋初值为 0for(i=0;i0&Ai=n)/若 Ai的值介于 1n,则标记数组 BBAi-1=1;for(i=0;irlink;/*q 指向 p 所
17、指结点的直接后继结点*/if(q-rlink!=NULL)/*若 q 所指结点不是链表的最后结点*/q-rlink-llink=p;/*将结点 P 插入到结点 q 的直接后继结点的前面*/p-rlink=q-rlink;/*将结点 q 的直接后继结点插入到结点 p 的后面*/P-llink-rlink=q;/*将结点 q 插入到结点 p 的前面*/q-llink=p-llink;q-rlink=p;37p-llink=q;2.设某堆栈采用顺序存储结构,元素利,a1,a2,a3,a4,a5,a6批依次进栈,若 6 个元素的出栈顺序为 a2,a3,a4,a6,a5,a1,则堆栈的容量至少应该是多少
18、个元素的空间?请利用图示说明你的结论。3.己知某二叉树采用顺序存储结构(如题三 3 图所示),其中,空白处表示结点不存在。请分别给出该二叉树的前序遍历序列和后序遍历序列。题三 3 图4.已知某无向图采用邻接表存储,邻接表如题三 4图 所示。请分别写出从顶点 A 出发进行深度优先遍历与 广度优先遍历后得到的遍历序列。四、算法设计题(本题 15 分)己知长度为 n 的顺序表 A 中元素按值从小到大排列,请写出在该顺序表中插入一个新的数据元素 item 的非递归算法。要求:插入新元素之前采用折半査找法确定新元素的插入位置。382018 年中国科学院大学数据结构部分39402019 年华中科技大学数据
19、结构与算法分析一、名词解释(20 分)时间复杂度哈夫曼树稳定排序拓扑排序链式存储结构二、选择题(40 分)1.算法的空间复杂度与()有关。A.源程序长度B.计算机内存大小C.编译程序D.问题规模大小2.以下关于线性表错误的是()。A.线性表元素个数有限B.线性表可以顺序表示和链式表示C.数组是线性表D.可以给线性表中每个元素一个序号3.有一个栈,元素 ABCDE 依次进栈,这 5 个元素,出栈顺序为 CBAED,则栈容量至少为?()。A.2B.3C.5D.44.一个进行产生数据供另外一个进程处理,两个进程间的速度可能不同步,使用下列哪个数据结构可以有助于解决两个进程间的同步问题?()。A.栈B
20、.队列C.树D.图5.一个长度为 8 的串的字串有()个。A.8B.9C.3741D.2566.一个树含有 30 个节点,则它的最大高度为()。A.5B.4C.6D.307.某二叉树有两个节点 p 与 q,对该树进行中序遍历时,p 在 q 的前面,则()。A.p 是 q 的祖先B.q 是 p 的祖先C.p 在 q 左边D.q 在 p 左边8.有 n 个顶点的无向连通图最少有()条边。A.n+1B.nC.n-1D.n(n-1)/29.下列关于查找的说法,错误的是()。A.对含有 n(n0)个元素的哈希表进行查找,最坏情况下的查找代价为 O(n)B.对于所有数据结构上的所有查找算法,最好的查找代价
21、为 O(1)C.在数组上进行查找,数组中元素必须有序D.在单链表上进行查找的最好情况下的代价为 O(1)10.为了更好的实现快速排序算法,待排序元素宜采用下列哪个结构存储?()。A.单链表B.数组C.双链表D.循环链表三.简答题(40 分)1。求 T(n)=2T(n/4)+n的非递归解并证明(10 分)2.证明 n 个节点的无向联通图最少有 n-1 条边(7 分)423 求时间复杂度(7 分)void pipi(int n)int p=1,r=n;while(r0)p=p*2;r=r/2;4 前序遍历和后续遍历能否确定一个二叉树,中序遍历先序遍历能否确定一颗二叉树,并分别解释原因(6 分)5
22、如何用优先队列实现先进先出队列?实现后的出队与入队操作的时间复杂度是多少?(10 分)四.代码题(50 分)1.C 语言算法实现二叉树中求最小值,并分析时间复杂度。2.C 语言算法实现邻接链表转化成邻接矩阵,并分析时间复杂度。3.大小为 n 的数组中双端队列 C 语言算法实现相关操作,出入队时间复杂度 O(1)。432019 年华中科技大学 887 数据结构与算法分析参考答案一、名词解释(20 分)时间复杂度【皮皮解析】算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n)。它表 示随问题规模 n 的增大,算法执行时间的增长率和 f(n)的增长率相同,称作算法的渐近时 间复杂度,
23、简称为时间复杂度。其中 f(n)是问题规模 n 的某个函数。哈夫曼树【皮皮解析】在含有 N 个带权叶子结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树或最优二叉树。稳定排序【皮皮解析】假设 Ri=Rj,且在排序之前 Ri 领先于 Rj,若在排序后的序列中 Ri 仍然领先于 Rj,则称所用的排序算法是稳定的,反之则称所用的算法是不稳定的拓扑排序【皮皮解析】:将有向图中的顶点以线性方式进行排序,通过偏序得到图的全序。即对于任 何连接自顶点 u 到顶点 v 的有向边,在最后的排序结果中,顶点 u 总是在顶点 v 的前面。链式存储结构【皮皮解析】:线性表的存储结构有顺序存储结构和链式
24、存储结构两种,前者称为顺 序表,后者称为链表,其中顺序表是保存在一片连续的存储空间中的,而链表则是通过指针来与其他数据进行联系,每个数据元素除了存储元素本身信息,还要存储与其他数据之间的 关系。二、选择题(40 分)1.算法的空间复杂度与()有关。A.源程序长度B.计算机内存大小C.编译程序D.问题规模大小【皮皮解析】:D2.以下关于线性表错误的是()。A.线性表元素个数有限B.线性表可以顺序表示和链式表示C.数组是线性表D.可以给线性表中每个元素一个序号【皮皮解析】:C443.有一个栈,元素 ABCDE 依次进栈,这 5 个元素,出栈顺序为 CBAED,则栈容量至少为?()。A.2B.3C.
25、5D.4【皮皮解析】:B4.一个进行产生数据供另外一个进程处理,两个进程间的速度可能不同步,使用下列哪个数据结构可以有助于解决两个进程间的同步问题?()。A.栈B.队列C.树D.图【皮皮解析】:B 先进先出5.一个长度为 8 的串的子串有()个。A.8B.9C.37D.256【皮皮解析】:B长度为 8 的子串有 1 个,长度为 7 的子串有 2 个,长度为 6 的子串有 3 个,长度为 5的子 串有 4 个,长度为 1 的子串有 8 个,空串 1 个,共有(1+8)*8/2+1=37 个。6.一个树含有 30 个节点,则它的最大高度为()。A.5B.4C.6D.30【皮皮解析】:D,一条线7.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 练习
限制150内