计算机考研数据结构统考历年真题答案2009-2015.doc
《计算机考研数据结构统考历年真题答案2009-2015.doc》由会员分享,可在线阅读,更多相关《计算机考研数据结构统考历年真题答案2009-2015.doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2009 1-5:BCDBC6-10:BADBA41.该方法求得的路径不一定是最短路径。例如,对于下图所示的带权图,如果按照题中的原则,从A到C的最短路径为ABC,事实上其最短路径为ADC。 42.(1)算法的基本设计思想:定义两个指针变量p和q,初始时均指向头结点的下一个结点。P指针沿链表移动;当p指针移动到第k个结点时,q指针开始与p指针同步移动;当p指针移动到链表最后一个结点时,q指针所指元素为倒数第k个结点。以上过程对链表仅进行一遍扫描。 (2)算法的详细实现步骤: count=0,p和q指向链表表头结点的下一个结点; 若p为空,转; 若count等于k,则q指向下一个结点;否则,co
2、unt=count+1; p指向下一个结点,转步骤; 若count等于k,则查找成功,输出该结点的data域的值,返回1;返回; 查找失败,返回0; 算法结束。(3)算法实现:typedef struct LNode int data; struct LNode * link; * LinkList;int SearchN(LinkList list,int k)LinkList p,q;int count=0; /*计数器赋初值*/p=q=list-link; /*p和q指向链表表头结点的下一个结点*/while(p!=NULL)if(countlink;/*q移到下一个结点*/ p=p-l
3、ink; /*p移到下一个结点*/if(countdata); /*查找成功*/ return (1);/else/SearchN 2010 1-5:DCDCB 6-11:ACBBDA41.(1)构造的散列表如下下标0123456789关键字71481130189(2)查找成功的平均查找长度:ASL成功=12/7。 查找不成功的平均查找长度:ASL不成功=18/7。42.(1)给出算法的基本设计思想:先将n个数据x0x1xpxn-1原地逆置,得到xn-1xpxp-1x0,然后再将前n-p个和后p个元素分别原地逆置,得到最终结果:xpxp+1xn-1x0x1xp-1。(2)算法实现: void
4、reverse(int r,int left,int right) int k=left,j=right,temp; /k等于左边界left,j等于右边界right while(k0&pn)reverse(r,0,n-1);/将全部数据逆置reverse(r,0,n-p-1);/将前n-p个元素逆置reverse(r,n-p,n-1);/将后p个元素逆置(3)说明算法复杂性:上述算法的时间复杂度为O(n),空间复杂度为O(1)。2011 1-5:ABBCC 6-10:DACBA 41.高分笔记 图 最后一题42. (1)算法的基本设计思想:(5分) 1) 比较笨的方法:将两升序序列归并排序,然
5、后求其中位数,时间复杂度是O(n),空间复杂度O(n)。 2) 高效的方法:分别求两个升序序列A和B的中位数,设为a和b。如果a=b,则a或者b即为所求的中位数。原因:如果将两序列归并排序,则最终序列中,排在子序列ab前边的元素为先前两序列中排在a和b前边的元素;排在子序列ab后边的元素为先前两序列a和b后边的元素。所以子序列ab一定位于最终序列的中间,有因为a=b,显然a就是中位数。如果ab(假设a原因:同样可以用归并排序后的序列来验证,归并后排序后必然有形如ab的序列出现,中位数必然出现在(a,b)范围内。因此可以做如下处理:舍弃a所在序列A之中比较小的一半,同时舍弃b所在序列B之中比较大
6、的一半。在保留的两个升序序列中求出新的中位数a和b,重复上述过程,直到两个序列只含一个元素为止,则较小者即为所求中位数。(2)算法实现(高效方法):(8分)int Search(int A, int B, int n) int s1,e1,mid1,s2,e2,mid2; s1=0;e1=n-1;s2=1;e2=n-1; while(s1!=e1|s2!=e2)mid1=(s1+e1)/2;mid2=(s2+e2)/2;if(Amid1=Bmid2) return Amid1;if(Amid1len2) longList=L1-next; shortlist=L2-next; L=len1-l
7、en2;/表长之差 /if else longList=L2-next; shortlist=L1-next; L=len2-len1;/表长之差 /else While(L-) longList=longList-next; while(longList!=NULL) if(longList=shortList)/同步寻找共同结点 returnlongList; else longList=longList-next; shortlist=shortlist-next; /else /while returnNULL;/Search_First_Common(3)算法的时间复杂度为O(len
8、1+len2),空间复杂度为O(1)。2013 1-5:DCDBA 6-10:CCDCA 41.(1)给出算法的基本设计思想:(4分)算法的策略是从前向后扫描数组元素,标记出一个可能成为主元素的元素Num。然后重新计数,确认Num是否是主元素。算法可分为以下两步:选取候选的主元素:依次扫描所给数组中的每个整数,将第一个遇到的整数Num保存到c中记录Num的出现次数为1;若遇 到 的下一个 整 数 仍 等 于Num则计数加一,否则计数减一;当计数减到0时,将遇到的下一个整数保存到c中,计数重新记为1,开始新一轮计数,即从当前位置开始重复上述过程,直到扫描完全部数组元素。判断c中元素是否是真正的主
9、元素:再次扫描该数组,统计c中元素出现的次数,若大于n/2,则为主元素;否则,序列中不存在主元素。(2)算法实现:(7分)intMajority(intA,intn) inti,c,count=1;/c用来保存候选主元素,count用来计数 c=A0;/设置A0为候选主元素 for(i=1;i0) count-;/处理不是候选主元素的情况 else/更换候选主元素,重新计数 c=Ai; count=1; /else /for if(count0) for(i=count=0;in/2)returnc;/确认候选主元素 elsereturn-1;/不存在主元素/Majority42.(1)采用顺
10、序存储结构,数据元素按其查找概率降序排列。(2分)采用顺序查找方法。(1分)查找成功时的平均查找长度=0.351+0.352+0.153+0.154=2.1。(2分)(2)【答案一】采用链式存储结构,数据元素按其查找概率降序排列,构成单链表。(2分)采用顺序查找方法。(1分)查找成功时的平均查找长度=0.351+0.352+0.153+0.154=2.1。(2分)【答案二】采用二叉链表存储结构,构造二叉排序树,元素存储方式见下图。(2分)2014 1-5:CBADC 6-11:DDDDBC41解答:考查二叉树的带权路径长度,二叉树的带权路径长度为每个叶子结点的深度与权值之积的总和,可以使用先序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 考研 数据结构 统考 历年 答案 2009 2015
限制150内