章串讲-概念存储结构.pptx

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

4.1串的基本概念第4章串4.2串的存储结构4.3串的模式匹配1/21

串(或字符串)是由零个或多个字符组成的有限序列。4.1串的基本概念串?线性表串中所含字符的个数称为该串的长度(或串长),含零个字符的串称为空串,用Ф表示。双引号不是串的内容,起标识作用“a1a2…an”串的逻辑表示,ai(1≤i≤n)代表一个字符:2/21

串相等:当且仅当两个串的长度相等并且各个对应位置上的字符都相同时,这两个串才是相等的。如:“abcd”≠“abc”“abcd”≠“abcde”所有空串是相等的。3/21

子串:一个串中任意个连续字符组成的子序列(含空串)称为该串的子串。例如,“abcde”的子串有:“”、“a”、“ab”、“abc”、“abcd”和“abcde”等真子串是指不包含自身的所有子串。4/21

串的基本运算如下:?StrAssign(s,cstr):将字符串常量cstr赋给串s,即生成其值等于cstr的串s。?StrCopy(s,t):串复制。将串t赋给串s。?StrEqual(s,t):判串相等。若两个串s与t相等则返回真;否则返回假。?StrLength(s):求串长。返回串s中字符个数。?Concat(s,t):串连接:返回由两个串s和t连接在一起形成的新串。?SubStr(s,i,j):求子串。返回串s中从第i(1≤i≤n)个字符开始的、由连续j个字符组成的子串。串抽象数据类型=逻辑结构+基本运算(运算描述)5/21

?InsStr(s1,i,s2):插入。将串s2插入到串s1的第i(1≤i≤n+1)个字符中,即将s2的第一个字符作为s1的第i个字符,并返回产生的新串。?DelStr(s,i,j):删除。从串s中删去从第i(1≤i≤n)个字符开始的长度为j的子串,并返回产生的新串。?RepStr(s,i,j,t):替换。在串s中,将第i(1≤i≤n)个字符开始的j个字符构成的子串用串t替换,并返回产生的新串。?DispStr(s):串输出。输出串s的所有元素值。6/21

思考题串和线性表有什么异同?7/21

4.2串的存储结构串中元素逻辑关系与线性表的相同,串可以采用与线性表相同的存储结构。串顺序串链串逻辑结构存储结构8/21

串的顺序存储(顺序串)有两种方法:非紧缩格式示例紧缩格式示例A1001B1002C1003D1004E1005F1006G1007H1008I1009J100aK100bL100cM100dN100eABCD1001EFGH1002IJKL1003MN10044.2.1串的顺序存储及其基本操作实现每个单元(如4个字节)只存一个字符,称为非紧缩格式(其存储密度小)。每个单元存放多个字符,称为紧缩格式(其存储密度大)。一个单元9/21

对于非紧缩格式的顺序串,其类型定义如下: #defineMaxSize100typedefstruct{chardata[MaxSize];intlength;}SqString;用来存储字符串用来存储字符串长度10/21

顺序串中实现串的基本运算与顺序表的基本运算类似。详细算法实现参见教材。11/21

【例4-1】设计顺序串上实现串比较运算Strcmp(s,t)的算法。例如:ababcdabcdabd解:算法思路如下:(1)比较s和t两个串共同长度范围内的对应字符:①若s的字符>t的字符,返回1;②若s的字符<t的字符,返回-1;③若s的字符=t的字符,按上述规则继续比较。(2)当(1)中对应字符均相同时,比较s和t的长度:①两者相等时,返回0;②s的长度>t的长度,返回1;③s的长度<t的长度,返回-1。12/21

intStrcmp(SqStrings,SqStringt){inti,comlen;if(s.lengtht.length)comlen=s.length;//求s和t的共同长度elsecomlen=t.length;for(i=0;icomlen;i++) //在共同长度内逐个字符比较 if(s.data[i]t.data[i]) return1; elseif(s.data

文档评论(0)

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

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

版权声明书
用户编号:8001056127000014

1亿VIP精品文档

相关文档