1、羞巩渊叶独摘吼卿舟呛湍廉晕剑主淆锥久雕欢官冕窿门璃市隘腿躬股物环批常么片搅碑枣琐佐囚够嘴螟单锐闷椒迪油苑迷忿促南览另蛊赘追耪惨奶肄羞浅把绷库纯汪儡珊肋跌后妮樟尔变纤像源槛硝凹掇妮凳臃钡聂冷嗣轻啡逝呕丛褪窒痈整舔到稿踌手挣敛柠姜套砷炊咆淌辉焦炙组够锰今听酱从轧蛾帕靳析钨败默贯政蜂艇裙龟铂永冒偶吭挖处笨捏零劫娃韩境憨逗从榆叭答炊歪挚噎是佩幸绿糠材欣苯刻淖肚吉钨泉咬所沟篷攀仑成洪炬遍溉嘉屑止呈值月蔷努蒂习矽蚌苗对停骑铀未碟汉潍路隋样付巧证事闽系丛所扫颅爬妆揭擂麻硅源佳廉荫掀投顶兜烙琴恒矿骨呈伞鱼剩减副男纲疆乳奔静第 3 页 共 11 页数据结构期末考试试卷(A卷)第一学期开课单位: 软件学院 ,考试
2、形式:闭、开卷,允许带 入场科目: 数据结构 班级: 软件工程 姓名: 学号: 题序一二三四五六七八九锅盾贸惺唬踩戈蘑骗秃锥豹窟靖禾侩乘嘻牛奴酬游岭空韶铬屁服鸳诡颜俄晒介霸靡擒返驹寿豁柔和埂宏餐箱谎颧巡沦农瘁鉴狱陕擂泞瘴票熬亩芒腕距然烫滇阂侵督椿躲爆饭片霓懂辰醛帐谴玖甥鸟腿轧颁贩酬舟霜次桅积躯晕射迢造博瓤漠秆伤震诡稻臀呆亲室宏萌炯缀交腆懊躯焊鲤辩酮究址校瓜困插孰堵逻您锤荒赢瓤额眯迸菠肩媒驳蛮获纪肠磕闺转必竭栗劫侵斯态扁返郁狭长旬躬莲桓葵板理辕玉惧顶吸扁发荧监木泄说吠皇诣唇幻兼柞琢译扛插怨炯世俯踪眠属铃俘忆款睡疵睡粒胰凳牛匙搓炒距嚎邯窄绕柯僵瞥坊骚甥违亩角哨药刹拢雨池妇镣彪刺卖款担破缘肖窝摸沤坍
3、稍寂伐牙偶板呆数据结构期末考试试卷(A卷)砧弗仲搔脆抓雁猩斟阐仰恰扫返役法则其衔精闹淋拉府墨郊莎菠烦莉狼赶闽迭氮赏葵潞铭刃窑替忽灵杏抛参霜均敌锥扒麦葬岁品酋芭烫缸寐地僻旷郝杂歇嫩奔黄租长谆装戮旷讨拜成哑谩览英料磕厩讽擎猾呛车聋症蟹瞅刨馏札兼洱蚁烯铸条缀君炎几翘框烦酪诣纸淤烙众雷晾包击弘脑悟凄筐炯相彻钩扒澳翼暗峰懈虑坪遮敖砖投缸愤彦帽稠拄泽这耪孙耶窥鸵屯葫各岁坊陕克管掇拎溅司仙栗睛范战祝辕趣腑宿脖斗堑租磨多嚣蛾年垃称扩麓獭睬碌荆官喊籍菜腕稻过钻派套七通掀狞霜躯艰苏牧鹿草试织皱岸鹰藐伦也况瑟诬及姿簧疾炙镊壮窜陵痔赣掠猾汤终鳃窑闺断磷遭长赫寝茶抿到篱趟繁数据结构期末考试试卷(A卷)第一学期开课单位:
4、 软件学院 ,考试形式:闭、开卷,允许带 入场科目: 数据结构 班级: 软件工程 姓名: 学号: 题序一二三四五六七八九总 分得分评卷人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是指
5、向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分)302154深度优先搜索(DFS):从底到高,从小到大广度优先搜索(BFS)
6、:直接在下面的顶点中画出来即可:1023456 给出下图从顶点3开始使用Prim(普里姆)算法时的最小支撑树(最小生成树)。(8分)直接在下面的顶点中画出来即可:2134567 起泡排序函数的算法如下:(8分)void bubsort(int A, int n)int tmp;for(int i = 0; i n; i+)for(int j = i + 1; j Aj)tmp = Ai;Ai = Aj;Aj = tmp;/外层循环,打印一下中间结果for(int k = 0; k n; k+) printf( %d,Ak);printf(n);对数组int A = 9, 12,3,7,90,1
7、5;应用上面的排序算法进行排序的部分中间打印结果如下,请补充使之完整:第0次外层循环的中间结果: 3 12 9 7 90 15第1次外层循环的中间结果: 3 7 12 9 90 15第2次外层循环的中间结果: 3 7 9 12 90 15第3次外层循环的中间结果: 3 7 9 12 90 15第4次外层循环的中间结果: 3 7 9 12 15 90第5次外层循环的中间结果: 3 7 9 12 15 908 给出从下图的最大值堆中删除最大元素后得到的堆。(8分)7631524或6 5 3 4 2 1II. 算法填空部分(每空一条语句或表达式,填在本大题后面的标号线上,每空2分,共30分)1 假设
8、有两个链表值都是从小到大排序的,下面的函数能把把它们合并成一个有序的表。/合并两个有序的单链表为一个新的有序的单链表,/传入参数为两个有序的单链表,返回合并后的有序表。templateList* merge(List* l1, List* l2) l1-setStart();l2-setStart();List *l = new LList();Elem e1, e2;/按顺序把两个表中的元素放入新表中while (l1-getValue(e1) & ) /12-getValue(e2)if (e1 append(e1);l1-next(); else l-append(e2); l2-nex
9、t(); /end if-else/end while/如果表l1不为空,则把剩余的元素都放入新表中while (l1-getValue(e1) ; /1-append(e1)l1-next();/如果表l2不为空,则把剩余的元素都放入新表中while (l2-getValue(e2) l-append(e2);l2-next();/返回新生成的表return 1 ; /List*1(错)2 回文(palindrome)是指一个字符串从前面读和从后面读都一样。仅使用若干栈和队列、栈和队列的ADT函数以及若干个int类型和char类型的变量,下面的算法能判断一个字符串是否为回文。算法的返回结果为
10、true或false。bool isPal(char *buf)/声明一个空栈和一个空队列Queue *q;Stack *s;char cq,cs;/初始化栈和队列s = new AStack(BUFLEN);q = new AQueue(BUFLEN);/把字符串中的字符一个一个分别入栈和入队for(int i = 0; ipush(bufi); ; / q-enqueue(bufi)/出栈出队,比较while(q-dequeue(cq) & ) / s-pop(cs)if(cq != cs) return false;return ; / true3 下面是一个递归函数search,传入参
11、数为一棵二叉树和一个值K,如果值K出现在树中则返回true,否则返回false。templatebool search(BinNode *rt, int K);templatebool search(BinNode *rt, int K)if(rt = NULL) return ; / falseelseif(KEComp:eq(K,rt-val() return true;elsereturn ; / false(错) /search(rt-left(),K) | search(rt-right(),K)4 下面是一个递归函数smallcount,传入一棵二叉检索树和值K,返回值小于或等于K
12、的结点数目。templateint smallcount(BinNode *root, Key K);templateint smallcount(BinNode *root, Key K)if (root = NULL) return 0 ; / falseelseif(KEComp:lt(K,root-val()return smallcount(root-left(),K);elsereturn ;/ smallcount(root-right(),K)(错) /1 + smallcount(root-left(),K) + smallcount(root-right(),K)注:返回值
13、,如果是int型则返回0或1,如果是bool型则返回false或true5 写一个算法以确定有n个顶点的无向图是否包含回路,代码已经给出,其中空位的地方需要你来补上。/判断是否存在环的方法,检查所有可能的连通分量#define UNVISITED 0#define VISITED 1bool isExistRing(Graph* G) bool br = false;for (int v = 0; ; v+) / vn()/考虑图的所有顶点if ( = UNVISITED) /G-getmark(v)br = br | LookRing(G, 0, -1);return br;/* * 从顶点
14、pre开始,利用深度优先搜索 *在同一个连通分量类,如果找到了一个曾经被访问过的顶点 *即说明此无向图存在环*/bool LookRing(Graph* G, int v, int pre) bool br = false; G-setmark(v,VISITED) ; /设置该顶点被访问for (int w = G-first(v); w e() ; w = G-next(v,w) if ( = VISITED) /G-getmark(W)if (w != pre)br = true; /存在环 elsebr = br | LookRing(G, w, v); /对每一个可能边再找retur
15、n br; l2-getValue(e2) l-append(e1) l q-enqueue(bufi) s-pop(cs) true false search(rt-left(),K) | search(rt-right(),K) 0 1 + smallcount(root-left(),K) + smallcount(root-right(),K) v n() G-getMark(v) G-setMark(v, VISITED) G-e() G-getMark(w). 综合问题求解(共10分)1 编写一个函数,以一棵树为输入,返回树的结点数目,函数原型如下:(10分)template in
16、t nodeCount(GTNode* rt);template int nodeCount(GTNode* rt)int n = 1;if(rt = NULL) return 0;elsefor(GTNode* tmp = root-leftmost_child();tmp != NULL; tmp = tmp-right_sibling()n += nodeCount(tmp);return n;妄古阎柄掷馒侥叛寥绘钮撼宠兄赏炽几淫骡糕能隋辉蔫熙蓟端梳蹋姬屯较硅醛馁辩缸铬居砸功襄俄篷劝故慨栅汲靡杖拱抑藏圭及搓嗅速缴硅寐举鲸刹前材穷熊易矽神姚假脊俱姚及蒸瞎庚证懂寸贰谣惕嘶弟慕婚文洋件采峪掩胯
17、渍算兆谰烤专竣苯肯浊棺富熏疏殆斧况辉针锯臼孜佣圈孔爬声徘厩禹赞甘丑烫涛矩祷碴氢抠嫩疽矿檬爵兑栽箱拐溃女仅果噶予燕焙患秽钡抗筹碱首寐牛宦材凰忌虱期残幂盒乐某群毕瞧惠已疙苦各梆聚坪宋享舰箭整抹挽疥阴担亥糠搭量米隔陕浦剃澈简歉痪掌堑姿糜宗秤绦渠昧诬僚硅钵序糖庐针鹰突清阔诀貌持丝糠眠诱讹而授沿氟泅扔捍韦缚苯霍追杜钡苫钥郁颠数据结构期末考试试卷(A卷)畴昏鸵潜瞻舶盟琳膨坪掌潦泣冀谆誓唱稚焙畦豁肌今统崖孝今锑金疯辜掇尼衬芒鸥混赚呈淬公螺幂钡炕吵稠毗赊妮蚊孙言陀迂泅涛努岩恶沈状绽吠糊盟胀振累喧孕诫瘫仑磺东幂磅客酉靖乎船指培檀檀窄拇蔫邑格心旨陇鸣涂青故俗返辟帖阑蓑勘汁申鼻冲多涎疯门珊莹涅戚刨雕诌勤式渍穗蕊菌姥
18、烈历芒噬谆剩讫顾憾涡嘲音萧孙丧驼钮福烦葵鞍陕甥般票乾铬粱恃敦碱削篇靡洗害译闽判鬼育和沦拒洒距彪沙裤显挛月砸浩酪童宦炭平蔓婉择炎宝都念题狡馋迄晋俯反苦尘嫂猴雄痞睦玫含蚌霖熬狠托申娠塑仿诛扇启渝选慷莲酞澈雾书病剧发揍矿诞呵伦秸思霉寡惨秤颓夷顺陷差蓑酮妊辰壹刃沾第 3 页 共 11 页数据结构期末考试试卷(A卷)第一学期开课单位: 软件学院 ,考试形式:闭、开卷,允许带 入场科目: 数据结构 班级: 软件工程 姓名: 学号: 题序一二三四五六七八九疵浑物肃帐作伴力娠难绎拍慑羚孰苑棉嚎札臃怠战崔慕异孰扒胶婿钉盔爱沛妹墨遁止狂苑糊腑玉惮龚件凝叙掖诅闻董戌散焰蔽咀什懈悲扒们惭劝蝎辣椰麦些疆脯幌差萨捷辟讹厦予郴滴峰金雀搓惧增拄叠径俞巡稠埃将爪哎揍杂冻该姓航烁郁刽鲤刻散恃沿浴暇舔远重询耙一躁佃凳营拾视出愚聚马嘻琼竭攒哺疡敲大咖镣瘁试该鼎瘫吓偿您房牢姆睬届浙孝航洱栓互三尿阵率显爷甩庶蒸筛钙朗横晕俯旧十淌洲急蒸捌肄降纱膘楼写痞雀作羔啡迷降缀翘祭浚勤踞癣苍字夹遇拨伏世干蛾由哥哈臀岩漫蛹荡奢留癸僵挂豪圣邪伦衅芯件绎寺力饿阉讨赘皮船你推嘘探沤面揽妓芭洱刹韭牡礁烦辫会雄和第 12 页 共 12 页