大话数据结构(第五章 串)
串(string):由零个或者多个字符组成的有限序列,又名字符串。
一些概念:串无元素为空串,长度为零;串中任意个数连续字符组成的子序列称为该串的子串,包含子串的串称为主串。
1、串的比较
串的比较是通过组成串字符之间的编码进行的,字符的编码指的是字符在对应字符集中的序号。
计算机中常用的字符是使用标准ASCII编码,其有7位二进制数表示一个字符,总共可以表示128个字符。ASCII扩展为8位可以表示256个字符,满足以英语为主的国家。对于汉族等国家名族等,256显然不够。
因此有了Unicode编码,一般用16进制表示,约65万个字符。为了与ASCII兼容,Unicode的前256个字符与ASCII完全相同。
一般串的比较可以用在排序的功能上,一个应用例子就是字典里面单次的排序。
2、串的抽象数据类型
串的逻辑结构与线性表很相似,不同之处在于串针对的是字符集。
串的基本操作与线性表有很大区别,线性表更关注的是单个元素的操作,比如查找一个元素,插入或者删除一个元素,但是串中更多的是查找子串的位置、得到指定位置子串、替换子串等操作。
不同的高级语言,对于串的基本操作有不同的定义方法,但除了方法名称外,实质是类似的。
3、串的存储结构
同样,分为顺序存储和链式存储。
顺序存储,按照预定义大小分配固定长度的存储区。
串的链式存储结构:串的链式存储中,一个节点可以存储一个字符也可以存储多个字符。
起始串的链式存储结构在连接串与串操作时有一定的方便之外,不如顺序存储灵活,性能不如顺序存储结构
好。
4、朴素的模式匹配算法
在主串中查找子串,m为主串长度,n为子串长度。
效率低
5、KMP模式匹配算法
自己看,似乎有点复杂,没细看