第4章 串
4.1 串类型的定义
串的抽象数据类型的定义如下:![在这里插入图片描述](https://img-blog.csdnimg.cn/879d0d03b61343a0a6dde9252da432f5.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
算法4.1:利用判等、求串长和求子串等操作实现定位函数 Index(S,T,pos)
4.2 串类型的表示和实现
4.2.1 定长顺序存储表示
用定长数组描述![在这里插入图片描述](https://img-blog.csdnimg.cn/314cb50eddbd4c2db69e022ad6337e76.png)
算法4.2 串联接 Concat(&T,S1,S2)![在这里插入图片描述](https://img-blog.csdnimg.cn/1481ab94b45e466aab6391e67781fd89.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
串的联结操作示意图![在这里插入图片描述](https://img-blog.csdnimg.cn/8dc257e1a64544ca8e11c651023a642a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
算法4.3:求子串 SubString(&Sub,S,pos, len)![在这里插入图片描述](https://img-blog.csdnimg.cn/0e90e53384114ecabb7007c4952343b2.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
4.2.2 堆分配存储表示
表示![在这里插入图片描述](https://img-blog.csdnimg.cn/acdd595094b644658485db770754bd1b.png)
算法4.4:串插入操作 StrInsert(&S,pos,T)的实现![在这里插入图片描述](https://img-blog.csdnimg.cn/40ceedbdfa0546f58bb9455dfaf41923.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
只含最小操作子集的 HString串类型的模块说明![在这里插入图片描述](https://img-blog.csdnimg.cn/599176e09d09414fb6dd3d839148a637.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0cecf7686bd54cbaa99eef0264633db4.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/3df126a177924eafb5585c9a4d1bb3b6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/08519677aa4141f191d9e6a0c65bcc25.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
4.2.3 串的块链存储表示
图示
块链结构的说明
4.3 串的模式匹配算法
4.3.1 求子串位置的定位函数Index(S,T,pos)
算法4.5:用定长顺序存储结构写出不依赖于其他串操作的匹配算法,![在这里插入图片描述](https://img-blog.csdnimg.cn/203d822d669a4dbaa7cd5032afd3f62a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NoYXNlbFdhbmc=,size_16,color_FFFFFF,t_70)
算法4.5的匹配过程
4.3.2 模式匹配的一种改进算法
KMP改进过程示例
利用模式的next函数进行匹配的过程示例
算法4.6:KMP算法(形式上和算法4.5极为相似)
算法4.7:仿照KMP算法,可得到求next函数值的算法
算法4.8:计算next函数修正值的算法
4.4 串操作应用举例
4.4.1 文本编辑
一段源程序(可看成文本串)
输入到内存后
假设图4.7所示文本串只占一页,且起始行号为100,则该文本串的行表如图4.8所示
4.4.2 建立词索引表
书目文件及其关键词索引表
算法4.9:
算法4.10:索引表上进行插入
其中4个操作的具体实现分别如算法4.11、4.12、4.13和4.14所示