算法与数据结构-串第4章.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文档。上传文档
查看更多
第4章 串 串的逻辑结构和线性表相似 串是数据对象受约束的线性表 串的基本操作和线性表有很大差别 串的基本操作通常是以“串的整体”作为操作对象 4.1串的类型定义和概念 串(String):由零个或多个字符组成的有限序列。 记为:s=’a1a2…an’(n≥0) 概念: s为串名,‘a1a2…an’为串值 ai,字符 n为串的长度;n=0,空串(Null String) 若ai 都是 ‘ ’,则称为空格串(blank string) 字符串术语 空串:不含任何字符的串,串长度=0 空格串:仅由一个或多个空格组成的串 子串:由串中任意个连续的字符组成的子序列。 主串:包含子串的串。 如:A=’Shenzhen University’ B=’University’ A为主串,B为子串。 二、字符串术语 位置:字符在序列中的序号。子串在主串中的位置以子串第一个字符在主串中的位置来表示。 串相等的条件:当两个串的长度相等且各个对应位置的字符都相等时才相等。 模式匹配:确定子串在主串中首次出现的位置的运算 串运算举例 串运算的例子: 串的抽象数据类型定义如下: ADT String{ 数据对象:D={ai | ai ? CharacterSet , i=1,2,... ,n,n=0} 数据关系:R={ai-1 ,ai | ai-1 ,ai ? D ,i=2,...,n} 基本操作: 串赋值:StringAssign(S,T) 求串长:StringLenth(S) 串判等:StringEqual(S,T) 串联接:StringConcat(S,T) 求子串:SubString(S,start,length) //5个基本操作 子串定位:Index(S,T) 置换:Replace(S,T,V) 插入子串:StringInsert(S,start,T) 删除子串:StringDelete(S,start,length) }ADT String 4.2串的表示和实现 串的顺序存储 静态分配存储 堆分配存储 串的链式存储 串的顺序表示和实现 1.静态分配存储空间 顺序存储结构的串的类型定义如下: #define MAXSIZE 1024 ∥串的最大容量 typedef struct {char ch[MAXSIZE]; ∥存放串的数组 int curlen; ∥curlen是串的当前长度 }STring; #define MAX_STRING 255 typedef unsigned char String[MAX_STRING+1]; ∥0号单元存放串的长度,字符从1号单元开始存放 2.堆分配存储 在程序执行过程中,利用标准函数malloc和free动态地分配或释放存储字符串的存储单元,提高存储资源的利用率。并以一个特殊的字符(’\0’)作为字符串的结束标志。 typedef struct { char *str; int length; }HString; 不同的定义形式,算法中的处理也略有不同。 基本操作:串的赋值 int StringAssign(HString *S, *T) ∥将串T的值赋给串S {if(S-str) free(S-str); ∥若s已经存在,将它占据的空间释放掉 len= T-length; ∥T串的长度 S-length=len; ∥赋予字符串长度 if(!len) ∥空串 {S-str=(char*)malloc(sizeof(char)); S-str[0]=’\0’; } else ∥非空串 {S-str=(char*)malloc((len+1)*sizeof(char));∥分配空间 if(!S-str) return ERROR; for(i=0;i=len;i++) ∥对应的字符赋值 S-str[i]=T-str[i]; }∥if return OK; }∥StringAssign 基本操作:串联接 基本操作的算法:子串定位

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档