大话数据结构 第五章 串
串
定义
- 串是由零个或多个字符组成的有限序列,又名叫字符串
- 串的相邻字符之间具有前驱和后继的关系
串的比较
- 计算机常用字符使用的标准的ASCII码,由8位二进制数表示
- 后来有了Uincode编码,由16位的二进制数表示
串的抽象数据类型
- 串针对的是字符集,也就是串中的元素都是字符
- 串中更多的是查找字串位置、得到指定位置字串、替换字串等操作
串的顺序存储结构
顺序存储结构
-串的顺序存储结构是用一组连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。一般用固定长度的数组来定义
链式存储结构
- 串的链式存储结构与线性表类似。一个结点存放一个字符,也可以存放多个字符。
- 链式存储结构除了在连接串与串操作中有一定方便之外,总的来说不如顺序结构灵活,性能也不如顺序结构好
串的朴素的模式匹配算法
- 其中心思想是:对主串的每一个字符作为子串开头,与要匹配的字符串进行匹配。对主串做大循环,对子串做小循环,知道匹配成功或全部遍历主串。
- 复杂度为O((n*m+1)*m)
KMP模式匹配算法
- 大大避免了重复遍历的情况,避免了不必要的回溯发生
- 主串的i值不回溯;字串j值的变化与主串没有关系,j值的多少取决于当前字符之前的串的前后缀的相似度
- 主要通过next数组完成
- 复杂度为O(n+m)
KMP模式匹配算法的改进
- 改进过的KMP算法,它是在计算出next值的同时,如果a位字符与它next值指向的b位字符相等,则该a位的nextval就指向b位的nextval值,如果不等,则该a位的nextval值就是它自己a位的next值