您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 中南大学计算机数据结构2013试题参考答案
中南大学考试试卷2015--2016学年上学期期末考试试题时间100分钟数据结构课程56学时3.5学分考试形式:闭卷专业年级:计算机科学与技术10级总分100分,占总评成绩70%姓名班级学号(本试卷共四道大题,答案全部做在答题纸上!)一、选择题(每题2分,共24分)1.以下数据结构中,属于线性结构的是()A.图B.栈C.二分查找树D.森林2.用二分法查找表(a0,a1,a2,a3,……a16),需要比较2次才能找到的元素是()A.a7和a16B.a11和a13C.a1和a14D.a3和a123.用概率查找改进查找效率,是经过多次查找以后使得()A.查找次数越少的元素查找速度越快B.查找次数越少的元素越往前存放C.查找次数越多的元素越往后存放D.查找次数越多的元素查找速度越快4.二分查找要求元素()A.有序、顺序存储B.有序、链式存储C.无序、顺序存储D.无序、链式存储5.已知pPre为指向链表中某结点的指针,pNew是指向新结点的指针,以下哪段伪码算法是将一个新结点插入到链表中pPre所指向结点的后面?()A.pPre-link=pNew;pNew=null;B.pPre-link=pNew-link;pNew-link=null;C.pNew-link=pPre-link;pPre-link=pNew;D.pNew-link=pPre-link;pPre-link=null;6.在递归算法执行过程中,计算机系统必定会用到的数据结构是()A.队列B.链表C.栈D.二叉树7.一个队列的入列序为ABCD,则队列的可能输出序列为()A.DCBAB.ABCDC.ADCBD.CBDA8.具有10个叶子结点的二叉树中有()个度为2的结点A.8B.9C.10D.119.若A=10,B=4,C=6,D=4,E=15则后缀表达式“AB*CD+-E+”的值为()。A.45B.31C.53D.6510.在一个具有n个顶点的无向图中,要连通全部顶点至少需要()条边。A.nB.n+1C.n-1D.n/211.对数据序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排序变为{9,15,7,8,20,-1,4},则采用的是()算法。A.直接选择排序B.冒泡排序C.直接插入排序D.希尔排序12.以下哪个算法可以判断出一个有向图中是否有回路()。A.广度优先遍历B.拓扑排序C.求最短路径D.求关键路径1.B7.B2.D8.B3.D9.A4.A10.C5.C11.C6.C12.B二、填空题(每题2分,共20分)1.一个算法的时间效率表达式是40n2+2log2n+1000,这个算法的大O表达式是。2.向一个长度为n的顺序表中的第i个元素(1≤i≤n)之前插入一个元素时,需要向后移动__________个元素。3.如果经常对线性表进行插入和删除运算,则最好采用存储结构。4.在有n个叶子结点的哈夫曼树中,总结点数是_______。5.带头结点的双循环链表L为空表的条件是_______。6.用数组Q(其下标在0…n-1之间,共有n个元素)表示一个循环队列,front为当前队头元素的前一个位置,rear为队尾元素的位置,假设队列中的元素个数总小于n,则求队列中元素个数的公式是_____________________。7.在双链表中,在指针P所指结点前面插入一个结点*S时的语句序列是:S-next=P;S-prior=P-prior;P-prior=S;_______;8.表达式a*(b+c)-d的后缀表达式是。9.下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。voidbubble(intr[n]){for(i=1;i=n-1;i++){for(exchange=0,j=0;jn-i;j++)if(r[j]r[j+1]){temp=r[j+1];______________;r[j]=temp;exchange=1;}if(exchange==0)return;}}10.下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。structrecord{intkey;intothers;};intbisearch(structrecordr[],intk){intlow=1,mid,high=n;while(low=high){________________________________;if(r[mid].key==k)return(mid);elseif(r[mid].keyk)high=mid-1;elselow=mid+1;}return(0);}O(n2)(n-i+1)链式2n-1L-next=L-prior或L-next=L(Q.rear-Q.front+n)%nS-prior-next=Sabc+*d-d!=ilowhigh三、应用题(每题9分,共36分)1.已知一棵二叉树,其中序序列DBCAFGE,后序序列DCBGFEA,构造该二叉树。2.如下图所示为5个乡镇之间的交通图,乡镇之间道路的长度如图中边上所注。现在要在这5个乡镇中选择一个乡镇建立一个消防站,问这个消防站应建在哪个乡镇,才能使离消防站最远的乡镇到消防站的路程最短。试回答解决上述问题应采用什么算法,并写出应用该算法解答上述问题的每一步计算结果。154323964612由弗洛伊德(Floyd)算法进行求解,具体步骤如下:0636044069601239120)1(D,061215360412406915601239120)0(D;061215360412406915601239120)1(D,06121536041013124069151060123139120)2(D;06101536041013124069151060123139120)3(D,061015360410910406915106012399120)4(D。设乡镇vi到其他各乡镇的最远距离为max_disdance(vi),则有:max_disdance(v1)=12,max_disdance(v2)=15,max_disdance(v3)=10,max_disdance(v4)=10,max_disdance(v5)=15,所以可知消防站应建在v3或v4乡镇,才能使离消防站最远的乡镇到消防站的路程最短。3.设哈希(Hash)表的地址范围为0~17,哈希函数为:H(K)=KMOD16。K为关键字,用线性探测法再散列法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49)造出Hash表,试回答下列问题:⑴画出哈希表的示意图;⑵若查找关键字63,需要依次与哪些关键字进行比较?⑶若查找关键字60,需要依次与哪些关键字比较?⑷假定每个关键字的查找概率相等,求查找成功时的平均查找长度。解:(1)画表如下:3分012345678910111213141516173217634924401030314647(2)查找63,首先要与H(63)=63%16=15号单元内容比较,即63vs31,no;2分然后顺移,与46,47,32,17,63相比,一共比较了6次!(3)查找60,首先要与H(60)=60%16=12号单元内容比较,但因为12号单元为空(应当有空标记),所以应当只比较这一次即可。2分(4)对于黑色数据元素,各比较1次;共6次;2分对红色元素则各不相同,要统计移位的位数。“63”需要6次,“49”需要3次,“40”需要2次,“46”需要3次,“47”需要3次,所以ASL=1/11(6+2+3×3)=17/11=1.5454545454≈1.554.假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。试为这8个字母设计哈夫曼编码。使用0~7的二进制表示形式是另一种编码方案。对于上述实例,比较两种方案的优缺点。解:方案1;哈夫曼编码先将概率放大100倍,以方便构造哈夫曼树。w={7,19,2,6,32,3,21,10},按哈夫曼规则:【[(2,3),6],(7,10)】,……19,21,32(100)(40)(60)192132(28)(17)(11)7106(5)23方案比较:方案1的WPL=2(0.19+0.32+0.21)+4(0.07+0.06+0.10)+5(0.02+0.03)=1.44+0.92+0.25=2.61方案2的WPL=3(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3结论:哈夫曼编码优于等长二进制编码四、算法设计题(每题10分,共20分)1.设有一组初始记录关键字序列(K1,K2,…,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于等于Ki。voidquickpass(intr[],ints,intt){inti=s,j=t,x=r[s];while(ij){while(ij&&r[j]x)j=j-1;if(ij){r[i]=r[j];i=i+1;}while(ij&&r[i]x)i=i+1;if(ij){r[j]=r[i];j=j-1;}}01010119213201010171060123字母编号对应编码出现频率10000.0720010.1930100.0240110.0651000.3261010.0371100.2181110.10字母编号对应编码出现频率111000.072000.193111100.02411100.065100.326111110.037010.21811010.10r[i]=x;}2.试写一算法,判断以邻接表方式存储的有向图中是否存在由顶点Vi到顶点Vj的路径(ij)。注意:算法中涉及的图的基本操作必须在存储结构上实现。在有向图中,判断顶点Vi和顶点Vj间是否有路径,可采用遍历的方法,从顶点Vi出发,不论是深度优先遍历(dfs)还是宽度优先遍历(bfs),在未退出dfs或bfs前,若访问到Vj,则说明有通路,否则无通路。设一全程变量flag。初始化为0,若有通路,则flag=1。算法intvisited[]=0;//全局变量,访问数组初始化intdfs(AdjListg,vi)//以邻接表为存储结构的有向图g,判断顶点Vi到Vj是否有通路,返回1或0表示有或无{visited[vi]=1;//visited是访问数组,设顶点的信息就是顶点编号。p=g[vi].firstarc;//第一个邻接点。while(p!=null){j=p-adjvex;if(vj==j){flag=1;return(1);}//vi和vj有通路。if(visited[j]==0)dfs(g,j);p=p-next;}//whileif(!flag)return(0);}//结束
本文标题:中南大学计算机数据结构2013试题参考答案
链接地址:https://www.777doc.com/doc-5136065 .html