[理学]数据结构 严蔚敏 c语言版 第 4 章 串.pptVIP

[理学]数据结构 严蔚敏 c语言版 第 4 章 串.ppt

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

假设主串为‘s1s2…sn’,模式串为‘p1p2…pn’ 假设此时应与模式中的第k(kj)个字符进行比较,那么模式中前k-1个子串必须满足什么关系了呢? ‘p1p2…pk-1’=‘si-k+1si-k+2…si-1’ 已经得到的匹配结果是什么? ‘pj-k+1pj-k+2…pj-1’=‘si-k+1si-k+2…si-1’ 从而我们得到: ‘p1p2…pk-1’=‘pj-k+1pj-k+2…pj-1’ 若令next[j]=k,则next[j]表明当模式中第j个字符与主串中相应字符失配时,在模式中需要重新和主串中该字符进行比较的字符的位置,则next函数的定义为: 模式串T= ‘abaabcac’的next函数 堆存储结构的优点:堆存储结构既有顺序存储 结构的特点,处理(随机取子串)方便,操作中对 串长又没有任何限制,更显灵活,因此在串处理的 应用程序中常被采用。 定长顺序存储表示和堆分配存储表示通常为高 级程序设计语言所采用。 ▲ 4.2.3 串的块链存储表示 串值也可用单链表存储,简称为链串。 链串与 单链表的差异只是它的结点数据域为单个字符。 S A B C D ^ E S A B C D ^ E 优点:便于插入和删除 缺点:空间利用率低 为了提高空间利用率,可使每个结点存放多个字符 (这是顺序串和链串的综合 (折衷) ),称为块链结构。 S C B A ^ # E D 存储密度 = 数据元素所占存储位 实际分配的存储位 实际应用时,可以根据问题所需来设置结点的大小。 例如:在编辑系统中,整个文本编辑区可以看成是 一个串,每一行是一个子串,构成一个结点。即: 同一行的串用定长结构(80个字符),行和行之间 用指针相联接。 结点结构用 C 语言定义如下: #define CHUNKSIZE 80 // 可由用户定义的块大小 typedef struct Chunk { // 结点结构 char ch[CHUNKSIZE];块 struct Chunk *next;链 } Chunk; 为了便于进行串的操作(联接),当以块链存储 串值时,除头指针外还可附设一个尾指针指示链表中 的最后一个结点,并给出当前串的长度。其结构用 C 语言定义如下: typedef struct { // 串的链表结构 Chunk *head, *tail; // 串的头和尾指针 int curlen; // 串的当前长度 } LString; 4.3 串的模式匹配算法 模式匹配 :子串定位运算。 (串匹配) 就是在主串中找出子串出现的位置。 用函数 Index(S, T, pos) 实现。 在串匹配中,将主串 S 称为目标(串), 子串 T 称为模式(串)。 如果在主串 S 中能够找到子串 T, 则称匹配成功, 返回第一个和子串 T 中第一个字符相等的字符在主串 S 中的序号;否则,称匹配失败,返回 0。 朴素的模式匹配算法 算法思想: 从主串 S 的第 pos 个字符起和模式 T 的第一个字符 比较之,若相同,则继续比较后续字符;否则从主串 S 的下一个字符起再重新和模式 T 的字符比较之。 例:S = ‘JINANSHI’,T = ‘NAN’。 I H S N A N I J N A N 不匹配 N A N 不匹配 N A N 匹配 N A N 匹配 匹配 3 13 12 11 10 9 8 7 6 5 4 3 2 1 0 b a b c a c b a c b a b a 13 S 5 4 3 2 1 0 c a c b a 5 T i j i j i j i i i i i i i j j j i 当采用定长顺序存储结构时,实现此操作的算法如下: 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

文档评论(0)

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

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

1亿VIP精品文档

相关文档