【考研类试卷】计算机学科专业基础综合数据结构-2及答案解析.doc
《【考研类试卷】计算机学科专业基础综合数据结构-2及答案解析.doc》由会员分享,可在线阅读,更多相关《【考研类试卷】计算机学科专业基础综合数据结构-2及答案解析.doc(11页珍藏版)》请在麦多课文档分享上搜索。
1、计算机学科专业基础综合数据结构-2 及答案解析(总分:96.00,做题时间:90 分钟)一、综合应用题(总题数:9,分数:96.00)利用顺序表的操作,实现以下的函数:(分数:32.00)(1).从顺序表中删除具有最小值的元素并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。(分数:4.00)_(2).从顺序表中删除第 i个元素并由函数返回被删元素的值。如果 i不合理或顺序表为空则显示出错信息并退出运行。(分数:4.00)_(3).向顺序表中第 i个位置插入一个新的元素 x。如果 i不合理则显示出错信息并退出运行。(分数:4.00)_(4).从顺序表
2、中删除具有给定值 x的所有元素。(分数:4.00)_(5).从顺序表中删除其值在给定值 s与 t之间(要求 s小于 t)的所有元素,如果 s或 t不合理或顺序表为空则显示出错信息并退出运行。(分数:4.00)_(6).从有序顺序表中删除其值在给定值 s与 t之间(要求 s小于 t)的所有元素,如果 s或 t不合理或顺序表为空则显示出错信息并退出运行。(分数:4.00)_(7).将两个有序顺序表合并成一个新的有序顺序表并由函数返回结果顺序表。(分数:4.00)_(8).从有序顺序表中删除所有值重复的元素,使表中所有元素的值均不相同。(分数:4.00)_1.线性表的每一个表元素是否必须类型相同?为
3、什么? (分数:4.00)_2.设有一个带表头结点的链表,结点的结构为(data,link,sort),其中 data为整型值域,link 和 sort都是指针域。已知链表所有结点都已通过 link域指针链接起来,构成单链表,且所有结点数据的值互不相同。试编写一个算法,利用 sort域把所有结点按照数据的值从小到大的顺序链接起来。 (分数:4.00)_针对带表头结点的单链表,试编写下列函数:(分数:20.00)(1).定位函数 Locate:在单链表中寻找第 i个结点。若找到,则函数返回第 i个结点的地址;若找不到,则函数返回 NULL。(分数:4.00)_(2).求最大值函数:Max:通过一
4、趟遍历在单链表中确定值最大的结点。(分数:4.00)_(3).统计函数 Count:统计单链表中具有给定值 x的所有元素。(分数:4.00)_(4).建立函数 Create:根据一维数组 an建立一个单链表,使单链表中各元素的次序与 an中各元素的次序相同,要求该程序的时间复杂度为 O(n)。(分数:4.00)_(5).整理函数 Tidyup:在非递减有序的单链表中删除值相同的多余结点。(分数:4.00)_已知 first为单链表的表头指针,链表中存储的都是整型数据,试写出实现下列运算的递归算法:(分数:12.00)(1).求链表中的最大整数。(分数:4.00)_(2).求链表的结点个数。(分
5、数:4.00)_(3).求所有整数的平均值。(分数:4.00)_3.用单链表存储多项式的结构定义如下: Typedef struct Term /多项式的项 float coef; /系数 int exp; /指数 struct Term * link;/链指针 * Polynomial; 试编写一个算法,输入一组多项式的系数和指数,按指数降幂的方式建立多项式链表,要求该链表具有表头结点。如果输入的指数与链表中已有的某一个项的指数相等,则新的项不加入,并报告作废信息。整个输入序列以输入系数为 0标志结束。算法的首部为 Polynomial createPoly(); (分数:4.00)_假设对
6、于一个多项式(Polynomial) P(x)=a m-1 +a m-2 +a 0 用长度为 m的单链表表示为(t m-1 ,t m-2 ,t m-3 ,t 1 ,t 0 )。其中,m 是多项式 P(x)中非零项(term)的个数,每一个 t i (0im-1)是 P(x)的一个非零项,它由三个数据成员 coef、exp 和 link组成,coef 是系数(浮点型),exp 是指数(整型),link 是链接指针。各个项的指数 e i 按递减顺序排列:e m-1 e m-2 e 0 0。(分数:12.00)(1).试描述多项式的数据结构(m 可以不出现在定义中)。(分数:4.00)_(2).给出
7、在多项式中插入新项的算法 Insert。该算法的功能是:如果多项式中没有与新项的指数相等的项,则将此新项插入到多项式链表的适当位置;如果多项式中已有与新项的指数相等的项,则将它们合并。(分数:4.00)_(3).利用这个插入算法给出多项式乘法的实现算法。(分数:4.00)_4.没有一个不带表头结点的单链表,表头指针为 head。试设计一个算法,通过遍历一趟链表,将链表中所有结点的链接方向逆转。要求逆转结果链表的表头指针 head指向原链表的最后一个结点。 (分数:4.00)_5.试设计一个实现下述要求的 Locate运算的函数。设有一个带表头结点的双向链表 L,每个结点有 4个数据成员:指向前
8、驱结点的指针 lLink、指向后继结点的指针 rLink、存放数据的成员 data和访问频度freq。所有结点的 freq初始时都为 0。每当在链表上进行一次 Loeate(L,x)操作时,令元素值为 x的结点的访问频度 freq加 1,并将该结点前移,链接到与它的访问频度相等的结点后面,使得链表中所有结点保存按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。 (分数:4.00)_计算机学科专业基础综合数据结构-2 答案解析(总分:96.00,做题时间:90 分钟)一、综合应用题(总题数:9,分数:96.00)利用顺序表的操作,实现以下的函数:(分数:32.00)(1).从顺序表中删除
9、具有最小值的元素并由函数返回被删元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。(分数:4.00)_正确答案:()解析:实现删除具有最小值元素的函数 bool deleteMin(SeqList /表空,中止操作返回 value=L.data0;int i,pos=0;/假定 1号元素的值最小 for(i=2;i=L.n;i+) /循环,寻找具有最小值的元素 if(L.datai-1value) /让 value记忆当前具有最小值的元素 value=L.datai-1;pos=i-1; for(int j=pos+1;jL.n;j+)L.dataj-1=L.dat
10、aj; L.n-; return true; (2).从顺序表中删除第 i个元素并由函数返回被删元素的值。如果 i不合理或顺序表为空则显示出错信息并退出运行。(分数:4.00)_正确答案:()解析:实现删除第 i个元素的函数(设第 i个元素在 datai-1,i=1,2,3,n) bool deleteNo_i(SeqList /表空或 i不合理,终止操作 value=L.datai-1; for(int j=i;jL.n;j+)L.dataj-1=L.dataj; L.n-; return true; (3).向顺序表中第 i个位置插入一个新的元素 x。如果 i不合理则显示出错信息并退出运行
11、。(分数:4.00)_正确答案:()解析:实现向第 i个位置插入一个新的元素 x的函数(设第 i个元素在 datai-1,i=1,2,3,n) bool InsNo_i(SeqList/表满或参数 i不合理,中止操作 return false; for(i=L.n;j=i;j-)L.dataj=L.dataj-1; L.datai-1=value;L.n+: return true; (4).从顺序表中删除具有给定值 x的所有元素。(分数:4.00)_正确答案:()解析:从顺序表中删除具有给定值 x的所有元素 void deleteValue(SeqList for(i=L.n;i=1;i-)
12、 /循环,寻找具有值 x的元素并删除它 if(L.datai-1=value)/删除具有值 x的元素 for(j=i;jL.n;j+)L.dataj-1=L.dataj; L.n-; (5).从顺序表中删除其值在给定值 s与 t之间(要求 s小于 t)的所有元素,如果 s或 t不合理或顺序表为空则显示出错信息并退出运行。(分数:4.00)_正确答案:()解析:实现删除其值在给定值 s与 t之间(要求 s小于 t)的所有元素的函数 bool deleteNo_sto_t(SeqList if(st)DataType temp=s;s=t;t=temp; /保持 st int i,j; for(i
13、=L.n-1;i=1;i-) /循环,寻找在给定范围内的元素并删除它 if(L.datai-1=sjL.n;j+) L.dataj-1=L.dataj; L.n-; return true; (6).从有序顺序表中删除其值在给定值 s与 t之间(要求 s小于 t)的所有元素,如果 s或 t不合理或顺序表为空则显示出错信息并退出运行。(分数:4.00)_正确答案:()解析:实现从有序顺序表中删除其值在给定值 s与 t之间的所有元素的函数 bool deleteNo_sto_t1(SeqList if(st)DataType temp=s;s=t;t=temp; /保持 st int i,j,k,
14、u; for(i=1;i=L.ni+); /寻找值s 的第一个元素 if(iL.n)return false; /没有值s 的元素 for(j=i;j=L.nj+); /寻找值t 的第一个元素 for(k=j,u=i;k=L.n;k+,u+) /前移,填补被删元素位置 L.datau-1=L.dataK-1; L.n=L.n-j+i: return true; (7).将两个有序顺序表合并成一个新的有序顺序表并由函数返回结果顺序表。(分数:4.00)_正确答案:()解析:实现将两个有序顺序表合并成一个新的有序顺序表的函数 bool Merge(SeqList int i=1,j=1,k=1;
15、while(i=A.ni+; else C.datak-1=B.dataj-1;j+;k+ while(i=A.n)C.datak-1=A.dataI-1;i+;k+ while(j=B.n)C.datak-1=B.dataj-1;j+;k+ C.n=k; return true; (8).从有序顺序表中删除所有值重复的元素,使表中所有元素的值均不相同。(分数:4.00)_正确答案:()解析:实现从有序顺序表中删除所有值重复的元素的函数 bool deleteSame(SeqList int i=1,j; while(i=L.n) /循环检测 while(L.datai-1!=L.datai)
16、i+; /寻找重复的元素 i与元素 i+1 j=i+2; /发现重复 while(L.datai-1=L.dataj-1)j+; for(k=i+1,u=j;u=L.n;k+,u+) L.datak-1=L.datau-1; i+: return true; 解析 通过顺序表的定义及基本特性来完成。1.线性表的每一个表元素是否必须类型相同?为什么? (分数:4.00)_正确答案:()解析:线性表每一个表元素的数据空间要求相同,但如果对每一个元素的数据类型要求不同时可以用等价类型(union)变量来定义可能的数据元素的类型。如 Typedef union /联合 int integerInfo;
17、 /整型 char charInfo; /字符型 float floatInfo; /浮点型 info; 利用等价类型,可以在同一空间(空间大小相同)indo 中存放不同数据类型的元素。但要求用什么数据类型的变量存,就必须以同样的数据类型来取。2.设有一个带表头结点的链表,结点的结构为(data,link,sort),其中 data为整型值域,link 和 sort都是指针域。已知链表所有结点都已通过 link域指针链接起来,构成单链表,且所有结点数据的值互不相同。试编写一个算法,利用 sort域把所有结点按照数据的值从小到大的顺序链接起来。 (分数:4.00)_正确答案:()解析:算法设计的
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研 试卷 计算机 学科专业 基础 综合 数据结构 答案 解析 DOC
