【考研类试卷】计算机学科专业基础综合数据结构-非统考补充内容:串、数组和稀疏矩阵、树与二叉树(二)及答案解析.doc
《【考研类试卷】计算机学科专业基础综合数据结构-非统考补充内容:串、数组和稀疏矩阵、树与二叉树(二)及答案解析.doc》由会员分享,可在线阅读,更多相关《【考研类试卷】计算机学科专业基础综合数据结构-非统考补充内容:串、数组和稀疏矩阵、树与二叉树(二)及答案解析.doc(14页珍藏版)》请在麦多课文档分享上搜索。
1、计算机学科专业基础综合数据结构-非统考补充内容:串、数组和稀疏矩阵、树与二叉树(二)及答案解析(总分:100.00,做题时间:90 分钟)一、B综合应用题/B(总题数:35,分数:100.00)1.采用顺序存储方式存储串,编写一个置换函数,将串 s1 中的第 i 个字符开始的 j 个字符(包括第 i 个字符)构成的子串用 s2 串进行替换,函数名为 replace(s1,i,j,s2)。例如:replace(“abcd“,1,3,“xyz“)返回“xyzd“。(分数:1.50)_2.采用顺序结构存储串,编写一个函数 index(s1,s2),用于判定 s2 是否是 s1 的子串。若是子串,返回
2、其在主串中的位置;否则返回-1。(分数:1.50)_3.设计一个算法将串中的所有字符倒过来重新排列。(分数:1.00)_4.利用串的基本运算,编写一个算法,删除串 s1 中所有的 s2 子串。(分数:3.00)_5.编写一个算法,计算子串 s2 在主串 s1 中出现的次数。(分数:3.00)_6.采用顺序结构存储串,编写一个实现串通配符匹配的函数 pattern_index(),其中的通配符只有?,它可以和任一字符匹配成功,例如,pattern_index(“?re“,“there are“)返回的结果是 3。(分数:3.00)_7.设数组 R0n-1的 n 个元素中有多个 0 元素,设计一个
3、算法,将 R 中所有的非 0 元素依次移动到 R 数组的前端。(分数:3.00)_8.已知 R0n-1为整型数组,试设计实现下列运算的递归算法: (1)求数组 R 中的最大整数; (2)求 n个整数之和; (3)求 n 个整数的平均值。(分数:3.00)_9.一个 n 阶矩阵 A0n-1,0n-1采用一维数组 s0n*n-1按行序为主序,存放其上三角各元素,编写一个算法求出 Sk在 Aij中的位置和 Aij在 Sk中的位置。(分数:3.00)_10.试设计一个算法,将 A0n-1中所有奇数移到偶数之前。要求不另增加存储空间,且时间复杂度为O(n)。(分数:3.00)_11.要求设计一个算法,设
4、置 mn(m=2,n=3)阶矩阵的元素后,统计这个矩阵中具有下列特征的元素个数,并输出它们的坐标及数值:它们既是所在行中的最小值,又是所在列中的最小值:或者,它们既是所在行中的最大值,又是所在列中的最大值。(分数:3.00)_12.对于二维数组 Amn,其中 m80,n80,先读入 m 和 n,然后读该数组的全部元素,对如下三种情况分别编写相应函数: (1)求数组 A 靠边元素之和; (2)求从 A00开始的互不相邻的各元素之和; (3)当 m=n 时,分别求两条对角线上的元素之和,否则打印出 mn 的信息。(分数:3.00)_13.以下是一个 55 阶螺旋方阵。设计一个算法输出该形式的 nn
5、(n10)阶方阵(顺时针方向旋进)。 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9(分数:3.00)_14.已知 A 和 B 为两个 nn 阶的对称矩阵,输入时,对称矩阵只输入下三角形元素,存入一维数组,如图所示(对称矩阵 M 存储在一维数组 A 中),设计一个算法求对称矩阵 A 和 B 的乘积。(分数:3.00)_15.说明稀疏矩阵的三元组存储结构并实现稀疏矩阵的基本操作。(分数:3.00)_16.在 nn(n3)阶的稀疏矩阵 A 中,只有下标满足 1in 和 n-ijn-i+2 的元素 Aij不等于0,若
6、这些非 0 元素按行优先的顺序存储在一维数组 B 中,编写一个算法通过 B 求 Aij之值。也就是说,在存在 B 的情况下已知 i、j,求 Aij。(分数:3.00)_17.假设稀疏矩阵只存放其非 0 元素的行号、列号和数值,以一维数组顺次存放,行号-1 作结束标志。例如,如下所示的稀疏矩阵 M,存放在一维数组 D 中,D 的元素如下:D0=0,D1=0,D2=1,D3=0,D4=4,D5=10,D6=2,D7=8,D8=5,D9=-1。 (分数:3.00)_18.如果一棵树有 n1个度为 1 的结点,有 n2个度为 2 的结点有 nm个度为 m 的结点,试问有多少个度为 0 的结点?试推导。
7、(分数:3.00)_19.如果一棵有 n 个结点的满二叉树的高度为 h(根结点所在的层次为 1),则求解下列问题。 (1)用高度如何表示结点总数 n?用结点总数 n 如何表示高度 h? (2)若对该树的结点从 0 开始按中序遍历次序进行编号,则如何用高度 h 表示根结点的编号?如何用高度 h 表示根结点的左子女结点的编号和右子女结点的编号?(分数:3.00)_20.编写一个算法,将用二叉链表表示的完全二叉树转换为二叉树的顺序表示,假设数据类型为 int 型。(分数:3.00)_21.一棵完全二叉树以顺序方式存储在数组 A 的 n 个元素中。设计一个算法构造该二叉树的链接存储表示。(分数:3.0
8、0)_22.设计一个算法,将一棵以链接方式存储的二叉树按顺序方式存储到数组 A 中。(分数:3.00)_23.计算以 t 为根的二叉树中各结点中的最大元素的值,假设数据类型为 float 型。(分数:3.00)_24.设一棵二叉树 T 采用二叉链表表示,编写一个算法,判断 T 是否是完全二叉树。(分数:3.00)_25.设一棵二叉树以二叉链表作为它的存储表示,试编写一个算法,用括号形式 key(LT,RT)输出二叉树的各个结点。其中,key 是根结点的数据,LT 和 RT 是括号形式的左子树和右子树。要求空树不打印任何信息,一个结点的树的打印形式是 x,而不应是(x,)的形式。(分数:3.00
9、)_26.假设二叉树采用链接存储方式存储,编写一个后序遍历二叉树的非递归算法。(分数:3.00)_27.试设计判断两棵二叉树是否相似的算法。所谓二叉树 t1 和 t2 相似是指 t1 和 t2 都是空的二叉树;或者 t1 和 t2 的根结点是相似的,t1 的左子树和 t2 的左子树是相似的且 t1 的右子树与 t2 的右子树是相似的。(分数:3.00)_28.有一棵二叉排序树 r,设计一个非递归算法删除以 x 为根结点的子树,并释放这些被删结点的空间。(分数:3.00)_29.假设二叉树 T 中至多有一个结点的数据域值为 x,试设计一个算法拆开以该结点为根的子树,使原二叉树分成两棵二叉树。(分
10、数:3.00)_30.假设二叉树采用链接存储结构进行存储,t 指向根结点,s 所指结点为任意一个给定的结点,编写一个求出从根结点到 p 所指结点之间路径的函数。(分数:3.00)_31.编写一个算法判断一棵二叉树是否是对称的。所谓对称是指其左、右子树的结构是对称的。(分数:3.00)_32.设树 b 是一棵采用链接结构存储的二叉树,设计一个算法把树 b 的左子树和右子树进行交换的算法。(分数:3.00)_33.编写一个算法,在一棵中序线索二叉树中以非递归的方式中序正向和中序反向遍历该二叉树。(分数:3.00)_34.设一棵二叉树采用二叉链表作为它的存储表示,指针 t 指向根结点,试编写一个在二
11、叉树中查找值为x 的结点,并打印该结点所有祖先结点的算法。在此算法中,假设值为 x 的结点不多于一个且数据类型为int 型。(分数:3.00)_35.设一棵二叉树采用二叉链表表示,编写一个算法,利用二叉树的前序遍历求任意指定的两个结点 I 和J 间的路径和路径长度。(分数:3.00)_计算机学科专业基础综合数据结构-非统考补充内容:串、数组和稀疏矩阵、树与二叉树(二)答案解析(总分:100.00,做题时间:90 分钟)一、B综合应用题/B(总题数:35,分数:100.00)1.采用顺序存储方式存储串,编写一个置换函数,将串 s1 中的第 i 个字符开始的 j 个字符(包括第 i 个字符)构成的
12、子串用 s2 串进行替换,函数名为 replace(s1,i,j,s2)。例如:replace(“abcd“,1,3,“xyz“)返回“xyzd“。(分数:1.50)_正确答案:(本题比较简单,有多种处理方法: 思路 1:先给替换串腾出足够的位置,比如从 i 到 j 有 n个字符,s2 的长度为 m,如果 mn,则下标 j+1 往后的字串向前移动 n-m 个位置;如果 mn,则下标j+1 往后的字串向后移动 m-n 个位置;如果 m 等于 n,则无需移动。然后将 s2 串复制到腾出的位置上。 思路 2:先提取 s1 中位置 i 之前的所有字符构成的子串 str1,再提取位置 i+j-1 及之后
13、的所有字符构成的子串 str2,最后将 str1、s2、str2 连接起来便构成了结果串。 本题代码如下(仅提供“思路 2”的实现): Str replace(Str *s1,int i,int j,Str *s2) Str s; int n,k; if(i+j-1=s1-length) for(n=0;ni-1;+n) /把 s1 的前 i-1 个字符赋给 s s.chn=s1-chn; for(n=0;ns2-length;+n) /连接 s2 串 s.chi+n-1=s2-chn; s.length=i+s2-length-1; for(n=s.length,k=i+j-1;ks1-le
14、ngth;+n,+k) /连接 s1 的位置 i 及之后的字符 s.chn=s1-chk; s.length=n; s.chs.length=/0; else s.ch0=/0; s.length=0; return s; )解析:2.采用顺序结构存储串,编写一个函数 index(s1,s2),用于判定 s2 是否是 s1 的子串。若是子串,返回其在主串中的位置;否则返回-1。(分数:1.50)_正确答案:(本题的算法思想是,设s1=“a1a2am“s2=“b1b2bn“从 s1 中找与 b1 匹配的字符 ai,若 ai=b1,则判断是否 ai+1=b2,a i+1=bn,若都相等,则 s2
15、为 s1 子串;否则继续比较 ai之后的字符。本题代码如下:int index(Str *s1,Str *s2)int i=0,j,k;while(is1-length) j=0;if(s1-chi=s2-chj)k=i+1;+j;while(ks1-length+j;if(j=s2-length) /s2 终止时找到了子串break;else +i;else +i;if(i=s1-length)return -1;elsereturn i+1;)解析:3.设计一个算法将串中的所有字符倒过来重新排列。(分数:1.00)_正确答案:(Str reverse(Str *s) int i; Str
16、t; for(i=0;is-length;+i) t.chs-length-i-1=s-chi; t.length=s-length; t.cht.length=/0; return t; )解析:4.利用串的基本运算,编写一个算法,删除串 s1 中所有的 s2 子串。(分数:3.00)_正确答案:(本题利用 index()函数和删除子串的函数循环来实现。其程序如下: void delall(Str *s1,Str *s2) int n; n=index(s1,s2); while(n=0) del(s1,n,length(s2); n=index(s1,s2); disp(s1); 其中 d
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考研 试卷 计算机 学科专业 基础 综合 数据结构 统考 补充 内容 数组 稀疏 矩阵 二叉 答案 解析 DOC

链接地址:http://www.mydoc123.com/p-1389799.html