ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:83.48KB ,
资源ID:29040020      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29040020.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据机构第四章java语言描述 第4章 串与数组 习题参考答案.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据机构第四章java语言描述 第4章 串与数组 习题参考答案.docx

1、数据机构第四章java语言描述 第4章 串与数组 习题参考答案习题四 参考答案一、选择题1下面关于串的叙述中,哪一个是不正确的?( B )A串是字符的有限序列B空串是由空格构成的串C模式匹配是串的一种重要运算D串既可以采用顺序存储,也可以采用链式存储2串的长度是指( A )A. 串中包含的字符个数 B. 串中包含的不同字符个数C. 串中除空格以外的字符个数 D. 串中包含的不同字母个数3设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )A求子串 B联接 C模式匹配 D求串长4设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( C )。 A. O

2、(m) B. O(n) C. O(n + m) D. O(nm)5. 串也是一种线性表,只不过( A )。A. 数据元素均为字符 B. 数据元素是子串 C. 数据元素数据类型不受限制 D. 表长受到限制6.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主进行存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。A. 13 B. 33 C. 18 D. 407. 有一个二维数组A1.6, 0.7 ,每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组占用的存储空间大小是( D )个字节。 A. 48 B. 96 C. 252 D. 288

3、8. 设有数组A1.8,1.10,数组的每个元素占3字节,数组从内存首地址BA开始以列序为主序顺序存放,则数组元素 A5,8的存储首地址为( B )。A. BA+141 B. BA+180 C. BA+222 D. BA+2259. 稀疏矩阵的三元组存储表示方法( B )A. 实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可B. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效C. 是一种链式存储方法D. 比十字链表更高效10. 用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有( A )域的结点表示。A.5 B.4 C. 3 D. 2二、填空题1. 一个串的任意连续字符组

4、成的子序列称为串的 子串 ,该串称为 主串 。2串长度为0的串称为 空串 ,只包含空格的串称为 空格串 。3. 若两个串的长度相等且对应位置上的字符也相等,则称两个串 相等 。4. 寻找子串在主串中的位置,称为 模式匹配 。其中,子串又称为 模式串 。5. 模式串t=ababaab的next数组值为 -1001231 ,nextval数组值为 -10-10-130 。6. 设数组A1.5,1.6的基地址为1000,每个元素占5个存储单元,若以行序为主序顺序存储,则元素A5,5的存储地址为 1140 。7在稀疏矩阵的三元组顺序表存储结构中,除表示非零元的三元组表以外,还需要表示矩阵的行数、列数和

5、 非零元个数 。8一个nn的对称矩阵,如果以相同的元素只存储一次的原则进行压缩存储,则其元素压缩后所需的存储容量为 n(n+1)/2 。9对矩阵压缩的目的是为了 节省存储空间 。10.稀疏矩阵一般采用的压缩存储方法有两种,即 三元组 和 十字链表 。三、算法设计题1 编写基于SeqString类的成员函数count(),统计当前字符串中的单词个数。参考答案:public int count() int wordcount = 0; /单词个数 char currChar, preChar; for (int i = 1; i this.length(); i+) currChar = this

6、.charAt(i); /当前字符 preChar = this.charAt(i - 1); /前一个字符 if (int) (currChar) 122 /当前字符不是字母 | (int) (preChar) 90 & (int) (preChar) = 65 & (int) (preChar) = 97 & (int) (preChar) = 122) wordcount+; return wordcount;2 编写基于SeqString类的成员函数replace(begin,s1,s2)。要求在当前对象串中,从下标begin开始,将所有的s1子串替换为s2串。参考答案: /begin

7、 int 开始位置;s1 String 原始字符串; s2 String 目标字符串; public SeqString replace(int begin, SeqString s1, SeqString s2) if (s1 = null | s2 = null) return null; SeqString ss = new SeqString(); /产生空串 SeqString source = this; int index = -1; while (index = source.indexOf(s1, begin) != -1) ss.concat(source.substrin

8、g(0, index); /串连接 ss.concat(s2); source = (SeqString) source.substring(index + s1.length(); /取子串 ss.concat(source); /串连接 return ss; 3 编写基于SeqString类的成员函数reverse()。要求将当前对象中的字符反序存放。参考答案:public SeqString reverse() for (int i = 0, j = this.length() - 1; i j; i+, j-) char temp = this.charAt(i); setCharAt

9、(i, this.charAt(j); setCharAt(j, temp); return this; 4 编写基于SeqString类的成员函数deleteallchar(ch)。要求从当前对象串中删除其值等于ch的所有字符。参考答案:public SeqString deleteAllChar(char ch) SeqString s1 = new SeqString(String.valueOf(ch); if (s1 = null) return null; SeqString ss = new SeqString(); /产生空串 SeqString source = this;

10、/当前串赋值到sourse int index = -1; while (index = source.indexOf(s1, 0) != -1) ss.concat(source.substring(0, index); /串连接 source = (SeqString) source.substring(index + 1); /取子串 ss.concat(source); /串连接 return ss; 5 编写基于SeqString类的成员函数stringcount(str)。要求统计子串str在当前对象串中出现的次数,若不出现则返回0。参考答案:public int stringCo

11、unt(SeqString str) SeqString source = this.curstr; int count = 0, begin = 0; int index; while (index = source.indexOf(str, begin) != -1) count+; begin = index + str.length(); return count; 6 鞍点是指矩阵中的元素aij是第i行中值最小的元素,同时又是第j列中值最大的元素。试设计一个算法求矩阵A的所有鞍点。参考答案:/存放矩阵中鞍点的类class Result TripleNode data; /三元组表,存

12、放鞍点的行、列、值 int nums; /鞍点个数 public Result(int maxSize) /构造方法 data = new TripleNodemaxSize; /为顺序表分配maxSize个存储单元 for (int i = 0; i data.length; i+) datai = new TripleNode(); nums = 0; /返回矩阵中的所有鞍点public Result allSaddlePoint(int ar) int i, j, flag, m, n; Result re = new Result(ar.length); for (i = 0; i a

13、r.length; i+) m = i; n = 0; flag = 1; /假设当前结点是鞍点 for (j = 0; j ari.length; j+) if (arij armn) n = j; for (j = 0; j armn) flag = 0; /不是鞍点 if (flag = 1) /是鞍点,将其加入 re.datare.nums = new TripleNode(m, n, armn); re.nums+; return re; 7 设计算法,求出二维数组An,n的两条对角线元素之和参考答案:public static int sumOfDiagonal(int a) in

14、t i, n = a0.length, sum1 = 0, sum2 = 0, sum; for (i = 0; i a.length; i+) sum1 += aii; /主对角线之和 sum2 += ain - i - 1; /副对角线之和 sum = sum1 + sum2; if (n % 2 = 1) /若矩阵行数为奇数,则减去两条对角线相交的元素。 sum -= an / 2n / 2; return sum;四、上机实践题1. 在顺序串类SeqString中增加一个主函数,测试各成员函数的正确性。参考答案: package ch04Exercise;import ch04.Seq

15、String;public class Exercise4_4_1 extends SeqString public static void main(String args) char chararray = W, o, r, l, d; SeqString s1 = new SeqString(); /构造一个空串 SeqString s2 = new SeqString(Hello); /以字符串常量构造串对象 SeqString s3 = new SeqString(chararray); /以字符数组构造串对象 System.out.println(串 s1= + s1 + , s2

16、= + s2 + , s3= + s3); s1.insert(0, s2); System.out.println(串s1在第0个字符前插入串s2后,s1= + s1); s1.insert(1, s3); System.out.println(串s1在第1个字符前插入串s3后,s1= + s1); s1.delete(1, 4); System.out.println(串s1删除第1到第3个字符后,s1= + s1); System.out.println(串s1中从第2到第5个字符组成的子串是: + s1.substring(2, 6); 运行结果:2. 已知两个稀疏矩阵A和B,试基于三

17、元组顺序表或十字链表的存储结构,编程实现A+B的运算。参考答案:package ch04Exercise;import ch04.SparseMatrix;public class Exercise4_4_2 public static SparseMatrix addSMatrix(SparseMatrix a, SparseMatrix b) /计算两个三元组表示的稀疏矩阵之和 if (a.getRows() != b.getRows() | a.getCols() != b.getCols() System.out.println(这两个矩阵不能相加); return null; Spa

18、rseMatrix c = new SparseMatrix(a.getNums() + b.getNums(); int i = 0, j = 0, k = 0; int len=0; while (i a.getNums() & j b.getNums() if (a.getData()i.getRow() b.getData()j.getRow() /A行B行 c.getData()k.setColumn(a.getData()i.getColumn(); c.getData()k.setRow(a.getData()i.getRow(); c.getData()k.setValue(a

19、.getData()i.getValue(); c.setNums(+k); i+; else if (a.getData()i.getRow() = b.getData()j.getRow() / A行号=B行号 if (a.getData()i.getColumn() = b.getData()j.getColumn() /A列=B列 if (a.getData()i.getValue() + b.getData()j.getValue() != 0) c.getData()k.setColumn(a.getData()i.getColumn(); c.getData()k.setRow(

20、a.getData()i.getRow(); c.getData()k.setValue(a.getData()i.getValue() + b.getData()j.getValue(); c.setNums(+k); /设置元素个数 i+; j+; else if (a.getData()i.getColumn() b.getData()j.getColumn() /A列 b.getData()j.getColumn() /A列B列 c.getData()k.setColumn(b.getData()j.getColumn(); c.getData()k.setRow(b.getData(

21、)j.getRow(); c.getData()k.setValue(b.getData()j.getValue(); c.setNums(+k); j+; else if (a.getData()i.getRow() b.getData()j.getRow() /A行B行 c.getData()k.setColumn(b.getData()j.getColumn(); c.getData()k.setRow(b.getData()j.getRow(); c.getData()k.setValue(b.getData()j.getValue(); c.setNums(+k); j+; whil

22、e (i a.getNums() /将A,B中的剩余非零元复制过去 c.getData()k.setColumn(a.getData()i.getColumn(); c.getData()k.setRow(a.getData()i.getRow(); c.getData()k.setValue(a.getData()i.getValue(); c.setNums(+k); i+; while (j col) current.setRight(oldtemp.getRight(); oldtemp.setRight ( current); break; else /当前位置存在元素 if (rt

23、emp.getCol() = col) System.out.println(本位置存在元素); return; else if (rtemp.getRight() = null) rtemp.setRight ( current); break; if (ctemp.getDown() = null) ctemp.setDown(current); this.setTu(this.getTu()+1); else while (ctemp.getDown() != null) oldtemp = ctemp; ctemp = ctemp.getDown(); if (ctemp.getRow() row) current.setDown(oldtemp.getDown(); oldtemp.setDown(current); break; else /当前位置存在元素 if (ctemp.getRow() = row) System.out.println

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1