- 1、本文档共66页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4.6 实战练习 一、选择合适的存储结构,并实现以下功能: (1).完成串的基本操作,如:串的赋值、比较、连接、插入、删除; (2).实现串的模式匹配,包括:BF算法和KMP算法; (3).字符串的应用:文本文件单词的计数与检索; 二、编写程序实现以下功能: 1、设计一个程序输出下图中的5*5阶的螺旋方阵。 4.6 实战练习 2、假设n*n的稀疏矩阵A采用三元组表示,设计一个程序实现如下功能: (1).生成如下两个稀疏矩阵的三元组a和b; (2).输出a+b的三元组。 4.7 小 结 理解串的定长顺序存储、堆存储及链式存储各自的优缺点,能在应用中进行合理的选择; 掌握串的堆存储结构及其实现串的各种操作的基本方法; 理解串匹配中BF算法的匹配过程及其具体实现; 理解串匹配的KMP算法,熟悉NEXT函数的定义,学会手工计算给定模式串的NEXT函数值; 理解数组的定义及顺序存储方式; 理解特殊矩阵(对角矩阵和三角矩阵)的压缩存储方式,会计算矩阵元素的存储位置; 理解稀疏矩阵的压缩存储实现,包括顺序存储及链式存储的实现。 4.3.2串的KMP匹配算法——模式匹配算法的改进 对于t=“abcabx”,有: 当j=1时,next[1]=-1; 当j=2时,j由1到j-1只有字符’a’,属于其他情况,next[2]=0; 当j=3,4时,j由1到j-1有字符’ab’、‘abc’,属于其他情况,next[j]=0; 当j=5时,j由1到j-1的串”abca”,前缀字符”a”与后缀”a”相等,可推算出k=1,所以next[5]=1; 当j=6时,j由1到j-1的串”abcab”,前缀字符”ab”与后缀”ab”相等,可推算出k=2,所以next[6]=2。 4.3.2串的KMP匹配算法——模式匹配算法的改进 j 1 2 3 4 5 6 模式串T a b c a b x next[j] -1 0 0 0 1 2 上述推理过程如下表所示: 4.3.2串的KMP匹配算法——模式匹配算法的改进 KMP算法如下: int Index(LString P, LString T){ /*返回子串T在主串P中的位置。若不存在,则函数值为0;其中T非空*/ int i=-1,j=-1; while(i=T.lenj=P.len) { if(j==-1 || T.s[i]==P.s[j]) { ++i;++j;} /*继续比较后继字符*/ else j=next[j];} /*模式串向右移动*/ } if(jP.len) return i-P.len; /*匹配成功*/ else return 0; } 4.3.2串的KMP匹配算法——模式匹配算法的改进 void get_next(LString T, int next[ ]) { /*求模式串T的next函数并存入数组next*/ j = 0; next[0] = -1; k = -1; while (j T.len) { if (k==-1 || T[j]==T[k]) { ++j; ++k; next[j] = k; } else k = next[k]; } } 4.4数组 数组的定义:一组具有相同数据类型的数据的有序集合。 数组中每一个数据称为元素,每一个元素均用统一的数组名和相应的下标确定,下标的个数取决于数组的维数。只用一个下标来区分的元素,称为一维数组;用两个下标来区分的元素,称为二维数组;用多个下标来区分的元素,称为n维数组或多维数组。 4.4.1数组的定义 线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。 下图为一个二维数组A[m][n]: 如果把二维数组的每一行视为一个整体,用R0=(a0,0,a0,1,…,a0,n-1)表示第1行,用R1=(a1,0,a1,1,…,a1,n-1)表示第2行,用Rm-1=(am-1,0,am-1,1,…,am-1,n-1)表示第m行,我们可以把一个二维数组A[m][n]看作是以R1,R2,…,Rm为数据元素的一个一维数组,其中的每个数组元素Ri(0≤i≤m-1)都是一个一维数组。 这样可以把二维数组视为是对线性表的一种推广。 4.4.1数组的定义 推而广之,可以把一个n维数组视为是一种线性结构,即它是每个数据元素为n-1维数组的一个一维数组;每个n-1维数组又被视为是元素为n-2维数组的一个一维数组;每个n-2维数组又被视为是元素为n-3维数组的一个一维数组;……由此可见,n维数组是一种非常复杂
您可能关注的文档
最近下载
- 山东职业学院档案管理.pdf VIP
- 冀教版小学数学四年级下册【全册】课时练+单元测试卷(含答案).pdf VIP
- DB11T 214-2016 居住区绿地设计规范.pdf VIP
- 国家开放大学电大本科《C语言程序设计》期末试题标准题库及答案(试卷号:1253).pdf VIP
- 天津专用2025届高考化学一轮复习考点规范练37生命中的基础有机化合物有机合成含解析.docx VIP
- 爆破工程技术人员取证培训初级D设计题真题参考答案.pdf VIP
- 利安隆(珠海)新材料有限公司年产5.15万吨高分子材料抗老化助剂混配、造粒项目环评报告表.pdf VIP
- 医生三基三严知识题库(附答案).docx VIP
- 2025年【N1叉车司机】考试及N1叉车司机考试题库(含答案).docx
- 未成年人防性侵安全教育.pptx VIP
文档评论(0)