- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                Chapter  4String 串的定义 n(n=0)个字符的有限序列 S=‘a1,a2,……,an’     串名: s     串值: ai(1=i=n)     串长: n 术    语 空  串n=0的串 子  串串中若干相邻字符组成的子序列 主  串包含子串的串 空格串仅含有空格字符的串(n不为0) 串相等设     s1=‘a11,…,an1’              s2=‘a12,…,an2’       若 n1=n2且ai1=ai2(1=i=n1)       则       s1=s2 串的模式匹配 定义  在串中寻找子串(第一个字符)在串中的位置 词汇  在模式匹配中,子串称为模式,串称为目标。 示例  目标 T : “Beijing”         模式 P : “jin”   匹配结果 = 3             在程序设计语言中,串只是作为输入或输出的常量出现,则只需存储此串的串值,即字符序列即可。但在多数非数值处理的程序中,串也以变量的形式出现 串的表示和实现 串的存储结构 对串的存储方式取决于我们对串所进行的运算,如果在程序设计语言中,串的运算只是作为输入或输出的常量出现,则此时只需存储该串的字符序列,这就是串值的存储。此外,一个字符序列还可赋给一个串变量,操作运算时通过串变量名访问串值。实现串名到串值的访问,在C++语言中可以有两种方式:一是可以将串定义为字符型数组,数组名就是串名,串的存储空间分配在编译时完成,程序运行时不能更改。这种方式为串的静态存储结构。另一种是定义字符指针变量,存储串值的首地址,通过字符指针变量名访问串值,串的存储空间分配是在程序运行时动态分配的,这种方式称为串的动态存储结构。      串值的存储 我们称串是一种特殊的线性表,因此串的存储结构表示也有两种方法:静态存储采用顺序存储结构,动态存储采用的是链式存储和堆存储结构。   1.串的静态存储结构 类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值的字符序列。由于一个字符只占1个字节,而现在大多数计算机的存储器地址是采用的字编址,一个字(即一个存储单元)占多个字节,因此顺序存储结构方式有两种: (1)紧缩格式:即一个字节存储一个字符。这种存储方式可以在一个存储单元中存放多个字符,充分地利用了存储空间。但在串的操作运算时,若要分离某一部分字符时,则变得非常麻烦。  d  a  t  a  └┘  s  t  r  u  c  t  u  r  e  \0  ?  图4-1  串值的紧缩格式存储  图4-1所示是以4个字节为一个存储单元的存储结构,每个存储单元可以存放4个字符。对于给定的串s=〃data└┘structure〃,在C++语言中采用字符'\0'作串值的结束符。串s的串值连同结束符的长度共15,只需4个存储单元。   串值的紧缩格式存储 ? 由上述讨论可知,串的顺序存储结构有两大不足之处:一是需事先预定义串的最大长度,这在程序运行前是很难估计的。二是由于定义了串的最大长度,使得串的某些操作受限,如串的联接运算等。  (2)非紧缩格式:这种方式是以一个存储单元为单位,每个存储单元仅存放一个字符。这种存储方式的空间利用率较低,如一个存储单元有4个字节,则空间利用率仅为25%。但这种存储方式中不需要分离字符,因而程序处理字符的速度高。  2.串的动态存储结构 我们知道,串的各种运算与串的存储结构有着很大的关系,在随机取子串时,顺序存储方式操作起来比较方便,而对串进行插入、删除等操作时,就会变得很复杂。因此,有必要采用串的动态存储方式。 串的动态存储方式采用链式存储结构和堆存储结构两种形式: (1)链式存储结构 串的链式存储结构中每个结点包含字符域和结点链接指针域,字符域用于存放字符,指针域用于存放指向下一个结点的指针,因此,串可用单链表表示。 用单链表存放串,每个结点仅存储一个字符,因此,每个结点的指针域所占空间比字符域所占空间要大得多。为了提高空间的利用率,我们可以使每个结点存放多个字符,称为块链结构每个结点存放4个字符。   (2)堆存储结构 堆存储结构的特点是,仍以一组空间足够大的、地址连续的存储单元存放串值字符序列,但它们的存储空间是在程序执行过程中动态分配的。每当产生一个新串时,系统就从剩余空间的起始处为串值分配一个长度和串值长度相等的存储空间。 串名的存储映象  串名的存储映象就是建立了串名和串值之间的对应关系的一个符号表。在这个表中的项目可以依据实际需要来设置,以能方便地存取串值为原则。 如: s1=〃data〃 s2=〃structure〃  若符号表中每行包含有串名、串值的始地址、尾地址,也可以不设尾地址,而设置串和长度值。 ?  对于链式存储串值的方式,如果要建立串变
                
原创力文档
                        

文档评论(0)