[数据结构(C语言版)].严蔚敏.吴伟民.课件.第04章-串.ppt

[数据结构(C语言版)].严蔚敏.吴伟民.课件.第04章-串.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(1) 若有tk=tj :则表明在模式串中有: t1t2…tk-1tk=tj-(k-1)tj-k… tj-1 tj,且不可能存在k’k满足上式,即:next[j+1]=next[j]+1=k+1 (2) 若有tk≠tj :则表明在模式串中有:t1 t2…tk-1 tk≠tj-(k-1) tj-k… tj-1 tj ,当tk≠tj时应将模式向右滑动至以模式中的第next[k]个字符和主串中的第j个字符相比较。若next[k]= k’,且tj = tk’,则说明在主串中第j+1字符之前存在一个长度为k’(即next[k])的最长子串,与模式串中从第一个字符起长度为k’的子串相等。即 next[j+1]=k’+1 同理,若tj≠tk,应将模式继续向右滑动至将模式中的第next[k’]个字符和tj对齐,??,依此类推,直到tj和模式串中的某个字符匹配成功或者不存在任何k’(1 k’j)满足等式:t1 t2…tk-1 tk’=tj-(k’-1) tj-k’… tj-1 tj 则: next[j]+1=1 根据上述分析, 求next函数值的算法如下: void next(StringType t , int next[]) /* 求模式t的next串t函数值并保存在next数组中 */ { int k=1 , j=0 ; next[1]=0; while (kt.length) { if ((j==0)|| (t.str[k]==t.str[j])) { k++ ; j++ ; if ( t.str[k]!=t.str[j] ) next[k]=j; else next[k]=next[j]; } else next[j]=j ; } } 习 题 四 ⑴ 解释下列每对术语的区别:空串和空白串;主串和子串;目标串和模式串。 ⑵ 若x和y是两个采用顺序结构存储的串,写一算法比较这两个字符串是否相等。 ⑶ 写一算法void StrRelace(char *T, char *P, char *S),将T中第一次出现的与P相等的子串替换为S,串S和P的长度不一定相等,并分析时间复杂度。 在C语言中,直接用字符数组来保存字符串,且用一个不会出现在串中的特殊字符‵\0′在串值的尾部来表示串的结束。 数据结构与算法 北京交通大学 理学院 北京 2014.9 第4章 串 串类型的定义 串的表示和实现 串的模式匹配算法 串操作应用举例 在非数值处理、事务处理等问题常涉及到一系列的字符操作。计算机的硬件结构主要是反映数值计算的要求,因此,字符串的处理比具体数值处理复杂。本章讨论串的存储结构及几种基本的处理。 第4章 串 4.1 串类型的定义 4.1.1 串的基本概念 串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它字符。 串值:双引号括起来的字符序列是串值。 串长:串中所包含的字符个数称为该串的长度。 空串(空的字符串):长度为零的串称为空串,它不包含任何字符。 空格串(空白串):构成串的所有字符都是空格的串称为空白串。 注意:空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。 子串(substring):串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。 子串的序号:将子串在主串中首次出现时的该子串的首字符对应在主串中的序号,称为子串在主串中的序号(或位置)。 例如,设有串A和B分别是: A=“这是字符串”,B=“是” 则B是A的子串,A为主串。B在A中出现了两次,其中首次出现所对应的主串位置是3。因此,称B在A中的序号为3 。 特别地,空串是任意串的子串,任意串是其自身的子串。 串相等:如果两个串的串值相等(相同),称这两个串相等。换言之,只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。 通常在程序中使用的串可分为两种:串变量和串常量。 串常量和整常数、实常数一样,在程序中只能被引用但不能不能改变其值,即只能读不能写。通常串常量是由直接量来表示的,例如语句错误(“溢出”)中“溢出”是直接量。 串变量和其它类型的变量一样,其值是可以改变。 4.1.2 串的抽象数据类型定义 ADT String{ 数据对象:D = { ai|ai∈CharacterSet, i=1,2,…,n, n ≥0 } 数据关系:R = {ai-1, a

文档评论(0)

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

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

1亿VIP精品文档

相关文档