数据结构第四章讲解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第四章讲解

第4章 串、数组和广义表 ;;串比较,strcmp(char s1,char s2) 串复制,strcpy(char to,char from) 串连接,strcat(char to,char from) 求串长,strlen(char s) ……;第4章 串、数组和广义表 ;1. 掌握串的存储方法,理解串的两种模式匹配算法; 2. 明确数组和广义表这两种数据结构的特点,掌握数组存储时地址计算方法,了解几种特殊矩阵的压缩存储方法。 ;4.1 串的定义;a=‘‘BEI’’ b=‘‘JING’’ c=‘‘BEIJING’’ d=‘‘BEI JING’’;4.2 案例引入;;4.3 串的类型定义、存储结构及运算; * ;顺序存储 链式存储;typedef struct{ char *ch; //若串非空,则按串长分配存储区, //否则ch为NULL int length; //串长度 }HString; ;链式存储表示;#define CHUNKSIZE 80 //可由用户定义的块大小 typedef struct Chunk{ char ch[CHUNKSIZE]; struct Chunk *next; }Chunk; typedef struct{ Chunk *head,*tail; //串的头指针和尾指针 int curlen; //串的当前长度 }LString; ;可将多个字符存放在一个结点中,以克服其缺点;算法目的:;北京林业大学信息学院; 将主串的第pos个字符和模式的第一个字符比较, 若相等,继续逐个比较后续字符; 若不等,从主串的下一字符起,重新与模式的第一个字符比较。 ;int Index(Sstring S,Sstring T,int pos){ i=pos; j=1; while (i=S[ 0 ] j =T[ 0 ]){ if ( S[ i ]=T[ j ]) {++i; ++j; } else{ i=i-j+2; j=1; } if ( jT[ 0 ]) return i-T[0]; else return 0; };若n为主串长度,m为子串长度,最坏情况是;KMP(Knuth Morris Pratt)算法(一般理解);利用已经部分匹配的结果而加快模式串的滑动速度? 且主串S的指针i不必回溯!可提速到O(n+m)!; max{ k|1kj,且“p1…pk-1”=“pj-k+1…pj-1” } 当此集合非空时 0 当j=1时 1 其他情况;int Index_KMP (SString S,SString T, int pos) { i= pos,j =1; while (iS[0] jT[0]) { if (j==0 || S[i]==T[j]) { i++;j++; } else j=next[j]; /*i不变,j后退*/ } if (jT[0]) return i-T[0]; /*匹配成功*/ else return 0; /*返回不匹配标志*/ } ; j 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 模式串 a b c a a b b c a b c a a b d a b ;void get_next(SString T, int next[]) { i= 1; next[1] = 0; j = 0; while( iT[0]){ if(j==0 || T[i] == T[j]){

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档