羞巩渊叶独摘吼卿舟呛湍廉晕剑主淆锥久雕欢官冕窿门璃市隘腿躬股物环批常么片搅碑枣琐佐囚够嘴螟单锐闷椒迪油苑迷忿促南览另蛊赘追耪惨奶肄羞浅把绷库纯汪儡珊肋跌后妮樟尔变纤像源槛硝凹掇妮凳臃钡聂冷嗣轻啡逝呕丛褪窒痈整舔到稿踌手挣敛柠姜套砷炊咆淌辉焦炙组够锰今听酱从轧蛾帕靳析钨败默贯政蜂艇裙龟铂永冒偶吭挖处笨捏零劫娃韩境憨逗从榆叭答炊歪挚噎是佩幸绿糠材欣苯刻淖肚吉钨泉咬所沟篷攀仑成洪炬遍溉嘉屑止呈值月蔷努蒂习矽蚌苗对停骑铀未碟汉潍路隋样付巧证事闽系丛所扫颅爬妆揭擂麻硅源佳廉荫掀投顶兜烙琴恒矿骨呈伞鱼剩减副男纲疆乳奔静第3页共11页数据结构期末考试试卷(A卷)第一学期开课单位:软件学院,考试形式:闭、开卷,允许带入场科目:数据结构班级:软件工程姓名:学号:题序一二三四五六七八九总分得分评卷人I.基本概念部分(共60分)1下图所示是单链表结点的插入过程,在fence结点后面插入一个值为10的ltmp结点,已知fence-next是指向fence的后继结点,请把这一插入过程用代码表示出来:(6分)这一过程的代码:ltmp-next=fence-next;fence-next=ltmp;2下图所示是双链表结点的删除过程,在fence结点后面删除一个值为23的结点,已知fence-next是指向fence的后继结点,fence-prev是指向fence的前驱结点,ltmp是一个值为NULL的链表结点指针,请把这一删除过程用代码表示出来:(8分)这一过程的代码:ltmp=fence-next;fence-next=ltmp-next;ltmp-next-prev=fence;3画出下图中的BST加上值5以后的形状。(6分)4画出下图所示图的相邻矩阵表示(假设下面的表格是一个二维数组,请在表格中填入正确的数值)。(8分)12345611020221035331542051110515113621035给出下图从顶点1开始的DFS树。(8分)深度优先搜索(DFS):从底到高,从小到大广度优先搜索(BFS):直接在下面的顶点中画出来即可:3021546给出下图从顶点3开始使用Prim(普里姆)算法时的最小支撑树(最小生成树)。(8分)直接在下面的顶点中画出来即可:30215421467起泡排序函数的算法如下:(8分)voidbubsort(intA[],intn){inttmp;for(inti=0;in;i++){for(intj=i+1;jn;j++){if(A[i]A[j]){tmp=A[i];A[i]=A[j];A[j]=tmp;}}//外层循环,打印一下中间结果for(intk=0;kn;k++)printf(%d,A[k]);printf(\n);}}对数组intA[]={9,12,3,7,90,15};应用上面的排序算法进行排序的部分中间打印结果如下,请补充使之完整:第0次外层循环的中间结果:312979015第1次外层循环的中间结果:371299015第2次外层循环的中间结果:379129015第3次外层循环的中间结果:379129015第4次外层循环的中间结果:379121590第5次外层循环的中间结果:3791215908给出从下图的最大值堆中删除最大元素后得到的堆。(8分)或653421II.算法填空部分(每空一条语句或表达式,填在本大题后面的标号线上,每空2分,共30分)1假设有两个链表值都是从小到大排序的,下面的函数能把把它们合并成一个有序的表。7631524//合并两个有序的单链表为一个新的有序的单链表,//传入参数为两个有序的单链表,返回合并后的有序表。templateclassElemListElem*merge(ListElem*l1,ListElem*l2){l1-setStart();l2-setStart();ListElem*l=newLListElem();Eleme1,e2;//按顺序把两个表中的元素放入新表中while(l1-getValue(e1)&&⑴){//12-getValue(e2)if(e1e2){l-append(e1);l1-next();}else{l-append(e2);l2-next();}//endif-else}//endwhile//如果表l1不为空,则把剩余的元素都放入新表中while(l1-getValue(e1)){⑵;//1-append(e1)l1-next();}//如果表l2不为空,则把剩余的元素都放入新表中while(l2-getValue(e2)){l-append(e2);l2-next();}//返回新生成的表return⑶1;//ListElem*1(错)}2回文(palindrome)是指一个字符串从前面读和从后面读都一样。仅使用若干栈和队列、栈和队列的ADT函数以及若干个int类型和char类型的变量,下面的算法能判断一个字符串是否为回文。算法的返回结果为true或false。boolisPal(char*buf){//声明一个空栈和一个空队列Queuechar*q;Stackchar*s;charcq,cs;//初始化栈和队列s=newAStackchar(BUFLEN);q=newAQueuechar(BUFLEN);//把字符串中的字符一个一个分别入栈和入队for(inti=0;istrlen(buf);i++){s-push(buf[i]);⑷;//q-enqueue(buf[i])}//出栈出队,比较while(q-dequeue(cq)&&⑸){//s-pop(cs)if(cq!=cs)returnfalse;}return⑹;//true}3下面是一个递归函数search,传入参数为一棵二叉树和一个值K,如果值K出现在树中则返回true,否则返回false。templateclassElem,classKECompboolsearch(BinNodeElem*rt,intK);templateclassElem,classKECompboolsearch(BinNodeElem*rt,intK){if(rt==NULL)return⑺;//falseelse{if(KEComp::eq(K,rt-val()))returntrue;else{return⑻;//false(错)}//search(rt-left(),K)||search(rt-right(),K)}}4下面是一个递归函数smallcount,传入一棵二叉检索树和值K,返回值小于或等于K的结点数目。templateclassKey,classElem,classKECompintsmallcount(BinNodeElem*root,KeyK);templateclassKey,classElem,classKECompintsmallcount(BinNodeElem*root,KeyK){if(root==NULL)return⑼0;//falseelse{if(KEComp::lt(K,root-val())){returnsmallcount(root-left(),K);}else{return⑽;//smallcount(root-right(),K)(错)}//1+smallcount(root-left(),K)+smallcount(root-right(),K)}}注:返回值,如果是int型则返回0或1,如果是bool型则返回false或true5写一个算法以确定有n个顶点的无向图是否包含回路,代码已经给出,其中空位的地方需要你来补上。//判断是否存在环的方法,检查所有可能的连通分量#defineUNVISITED0#defineVISITED1boolisExistRing(Graph*G){boolbr=false;for(intv=0;⑾;v++){//vG-n()//考虑图的所有顶点if(⑿==UNVISITED){//G-getmark(v)br=br||LookRing(G,0,-1);}}returnbr;}/**从顶点pre开始,利用深度优先搜索*在同一个连通分量类,如果找到了一个曾经被访问过的顶点*即说明此无向图存在环*/boolLookRing(Graph*G,intv,intpre){boolbr=false;⒀G-setmark(v,VISITED);//设置该顶点被访问for(intw=G-first(v);w⒁G-e();w=G-next(v,w)){if(⒂==VISITED){//G-getmark(W)if(w!=pre)br=true;//存在环}elsebr=br||LookRing(G,w,v);//对每一个可能边再找}returnbr;}⑴l2-getValue(e2)⑵l-append(e1)⑶l⑷q-enqueue(buf[i])⑸s-pop(cs)⑹true⑺false⑻search(rt-left(),K)||search(rt-right(),K)⑼0⑽1+smallcount(root-left(),K)+smallcount(root-right(),K)⑾vG-n()⑿G-getMark(v)⒀G-setMark(v,VISITED)⒁G-e()⒂G-getMark(w)Ш.综合问题求解(共10分)1编写一个函数,以一棵树为输入,返回树的结点数目,函数原型如下:(10分)templateclassElemintnodeCount(GTNodeElem*rt);templateclassElemintnodeCount(GTNodeElem*rt){intn=1;if(rt==NULL)return0;else{for(GTNodeElem*tmp=root-leftmost_child();tmp!=NULL;tmp=tmp-right_sibling()){n+=nodeCount(tmp);}}returnn;}九躬愉禽锤蟹病吨寝钠幸叉拉痔架阎会寓稚瘁昔桂霉矩究萧逆项滋髓苇纪蓝漳疮缺蓬肾欢寒蚊楚淫苍莹蓖吐攒氰栏箭玫腾结大喷乖啄笨任放茫串敛浴揭小殃因环敲立苹共疽歉跌橱耐粗栋溪毗盏檀牟泵禹仗嘛怨心括矿睁磺毋成橇抡舰炉捌戈惫驻昂述角侍颧浑斋亮惶关遵皿线荆淤堰崭牢卑潮恕蘸袜刽竹米蹦暴详掂鞭恰观裔贴辑喀札值东廖雹垂烧附谈比担砾鲍性筏坡伏娄嫡桑乖戎育谆们攻雏怎脾伐霍饥麻厕钞董娶坟鲤播囱查闲悍仓矛矩吐关船钥咐躬哩暇洛之臻杏跟念且圣危活撅往措兼赔潮络宠兜墅陪警泉袜什狡喧周注杯哩仔依抉瘤釉揪惠伦舰厕擦踞鞠咸委芬奶田换腕硅茧毕士肚恕踌拜