数据结构C版第4章串new详解.pptVIP

  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文档。上传文档
查看更多
第四章 串 课前索引 【学习目标】 1. 理解“串”类型定义中各基本操作的特点, 并能正确利用它们进行串的其它操作。 2. 理解串类型的各种存储表示方法。 3. 理解串匹配的各种算法。 【重点和难点】    相对于其它各个知识点而言,本章非整个课程的重点,鉴于串已是多数高级语言中已经实现的数据类型,因此本章重点仅在于了解串类型定义中各基本操作的定义以及串的实现方法,并学会利用这些基本操作来实现串的其它操作。本章的难点是理解实现串匹配的KMP算法的思想,但它不属本章学习的基本要求,更不是重点学习内容。 串的类型定义、串的存储表示、串匹配、KMP算法。 【学习指南】   虽然目前各常用的高级语言中都已经实现了串类型,但由于它是通过软件实现的,因此作为一个软件工作者还是应该了解串的实现方法。本章没有必须完成的算法设计题,如果有兴趣可以试试以下几个题:4.10,4.13,4.17,4.23,4.28,4.30。其中前2个是练习串的基本操作的应用,后2个是和KMP算法相关的练习。 【课前思考】 1. 串就是线性表的结论是否正确? 从数据结构的观点来说,串是一种特殊的线性表;但就数据类型而言,串不是线性表。 ? 2. 串和线性表的主要差别是什么? 希望你带着这个问题开始这一章的学习,并能在学完这一章的内容之后能得出正确的结论。 4.1 串的抽象数据类型的定义 一、串和基本概念 串(String或称字符串 )是零个或多个字符组成的有限序列。一般记作S=‘a1a2a3…an’ (n≥0), S 是串名,单引号括起来的字符序列是串值; ai(1≦i≦n)可以是字母、数字或其它字符; 串中所包含的字符个数n称为该串的长度。 空串(Empty String):长度为零的串,它不包含任何字符。 空格串(Blank String):将仅由一个或多个空格组成的串。用符号“Φ”表示“空格串。 一、串和基本概念(续) 串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。 通常将子串在主串中首次出现时的该子串的首字符对应的主串中的序号,定义为子串在主串中的序号(或位置)。 一、串和基本概念(续) 串相等:当且仅当两个串的值相等,即只有当两个串的长度相等,并且各对应位置的字符都相等时才相等。试看下例2个串: a=“BEIJING”, b=“BEIJING” c=“BEIJING”, d=“BEI JING” 例如,可利用串比较、求串长和求子串等操作实现子串定位函数Index(S,T)。 即查看在母串S中是否存在和T匹配的子串,若存在,则返回它在主串S中第一次出现的位置,否则返回0。 假设S=‘abcaabda’ , T=‘abda’ 如何实现? void replace(String S, String T, String V) {// 以串V替代串S中出现的所有和串T相同的子串  n=StrLength(S); m=StrLength(T);  StrAssign(news, NullStr); // 初始化 news 串为空串   pos = 1; i=0;  while ( pos = n-m+1) //pos+m-1=n  { i=Index(S, T, pos);  // 从pos指示位置起查找串T   if (i!=0) {   SubString(sub,S,pos,i-pos);//取不被置换的子串[pos,i-1]   Concat(news, news, sub); // 联接S串中不被置换部分   Concat(news,news, V);  // 联接V串   pos = i+m;        // pos 移至继续查询的起始位置   } // if  } // while  SubString(sub, S, pos, n-pos+1);// 剩余串[pos,n]   Concat( S, news, sub ); // 联接剩余子串并将新的串赋给S } 算法的描述与其对应的C/C++语句 T[1..S1[0]] = S1[1..S1[0]]; T[S1[0]+1..S1[0]+S2[0]] = S2[1..S2[0]]; 在串匹配中,一般将主串称为目标串,子串称之 为模式串。设S为目标串,T为模式串,且不妨设: S=‘s1s2…sn ’ T=‘t1…tm’ 串的匹配实际上是对于合法的位置0≦pos

文档评论(0)

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

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

1亿VIP精品文档

相关文档