第五章:串
(考串的比较,串的拼接,串的查找,C语言)
1:串的定义:串(string)是由零个或者多个字符组成的有限序列,又名叫字符串。一般记为s=“a1a2a3a4…an”(n>0),其中,s是串的名称,用双引号括起来的字符序列是串的值,i就是字符在串中的位置,字符数目n表示串的长度,零长度的字符串是空串。
2:串的比较
比较两个串必须是长度一样,各个对应位置的字符相等时才算相等;
两个串不相等时
n<m,且ai等于bi
存在k<=min(m,n),使得ai=bi,ak<bk
3:串的抽象数据类型
4:串的存储结构
串的存储与线性表相同分为两种。
串的顺序存储结构:使用一组地址连续的存储单元来存储串中字符序列的,按预定义的大小,为每个定义的串的变量分配一个固定长度的存储区。一般用定长数组表示。
存在一个预定义最大串长度,从0开始,使用动态分配得到,。比如在计算机中存在一个自由储存区,叫做堆。这个堆可以由c语言的动态分配函数malloc()free()来管理
串的链式存储结构:与线性表链式存储类似,但是为了一个字符存一个地址造成浪费,可以考虑一个节点对应多个字符,最后一个节点未被占满可以使用“#”等补全。
总的来说,串的链式存储不如顺序存储灵活,性能也不如顺序存储好。
五:朴素的模式匹配算法
index
找一个单词在一篇文章中的定位问题。这种子串的定位操作称作串的模式匹配。简单来说,就是主串的每个字符作为子串的开头,与要匹配的字符串进行匹配。对主串做大循环,每个字符开头做t长度的小循环,直到匹配成功或全部遍历完。