网站大量收购独家精品文档,联系QQ:2885784924

第04章节字符串数组.pptVIP

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第04章节字符串数组

以下给出了根据模式p的组成求数组next值的算法: void getnext(seqstring p,int next[]) { int i,j; next[0]=-1; i=0; j=-1; while (ip.length) { if (j==-1||p.str[i]==p.str[j]) {++i;++j;next[i]=j;} else j=next[j]; } for(i=0;ip.length;i++) printf(%d,next[i]); } KMP算法基本思想如下: 假设以i和j分别指示正文t和模式p中正待比较的字符,令i、j的初值为0;若在匹配过程中ti=pj,则i与j分别加1;否则i不变,而j退到next[j]的位置继续比较(即j= next[j]);若相等,则指针各自增加1;否则j再退到下一个next[j]值的位置,依此类推,直至下列两种可能: (1)一种是j退到某个next(next[..[next[j]]…])) 时,ti与pj字符比较相等,则i、j指针各自增加1 后继续进行比较; (2)一种是j退到-1(即模式的第一个字符“失配”), 此时需将正文指针i向右滑动一个位置,即从正文 的下一个字符ti+1起和模式p重新从头开始比较。 KMP算法的具体实现如下: int kmp(seqstring t, seqstring p, int next[]) { int i,j; i=0; j=0; while (it.length jp.length) { if (j==-1||t.str[i]==p.str[j]) {i++; j++;} else j=next[j]; } if (j==p.length) return (i-p.length); else return(-1); } 4.3.1 数组和数组元素 数组是线性表的一种存储方式。其实,数组本身也可以看成是线性表的推广,数组的每个元素由一个值和一组下标确定,在数组中,对于每组有定义的下标都存在一个与之相对应的值;而线性表是有限结点的有序集合,若将其每个结点的序号看成下标,线性表就是一维数组(向量);当数组为多维数组时,其对应线性表中的每个元素又是一个数据结构而已。 4.3 数 组 例如,对于一个m?n的二维数组A[m][n]: a00 a01 a02………a0( n-1) a10 a11 a12………a1( n-1) A = ┋ ┋ ┋ ┋ a(m-1)0 a(m-1)1……… a(m-1)(n-1) 当把二维数组看成是线性表时,它的每一个结点又是一个向量(一维数组)。例如,上述二维数组A可以看成是如下的线性表: (A0,A1,A2,……Am-1) 即A中每一行成为线性表的一个元素,其中每个元素Ai(0≤i≤m-1)都是一个向量; (ai0 , ai1 , ai2…….ai(n-1) ) 当然,也可以将上述二维数组A看成如下的线性表: (A0’,A1’,A2’,……An-1’) 即A中每一列成为线性表的一个元素,其中每一个元素Ai’(0≤i≤n-1)都是一个向量: (a0i , a1i , a2i,……a (m-1) i) 二维数组A中的每一个元素aij都同时属于两个向量,即:第i+1行的行向量和第j+1列的列向量,因此每个元素aij最多有两个前驱结点a(i-1) j和ai(j-1),也最多有两个后继结点a(i+1) j和ai(j+1)(只要这些结点存在);特别地,a00没有前驱结点,a(m-1) (n-1)没有后继结点,边界上的结点均只有一个后继结点或一个前驱结点。 对于m(m2)维数组,可以依据上述规律类推。 4.3.2 数组类的定义 ADT array { 数据对象D:具有相同类型的数据元素构成的有序集合; 数据关系R:对于n维数组,其每一个元素均位于n个向量中, 每个元素最多具有n个前驱结点和n个后继结点; 4.3.3 数组

文档评论(0)

shaoye348 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档