1
算法与数据结构  C语言版
1.6.4 本章小结
本章小结

串是由n(n≥0)个字符组成的有限序列,每个字符可以是任意的ASCII码字符,一般是字母、数字、标点符号等可在屏幕上显示的字符。一个串中任意连续的字符组成的子序列称为该串的子串。包含子串的串称为该子串的主串。

一个字符在一个串中的序号称为该字符在串中的位置。两个串的值完全相等意味着两个串不仅要长度相等,而且各个对应位置字符都相等。

在C语言中表示一个串值时用一对双引号把串值括起来,双引号本身不属于串。

串的抽象数据类型的操作集合主要包括赋值Assign(S,T)、求长度Length(S)、比较Compare(S,T)、插入Insert(S,pos,T)、删除Delete(S,pos,len)、截取子串SubString(S,pos,len,T)、查找Search(S,start,T)、替换Replace(S,start,T,V)等。

串的存储结构有顺序存储结构和链式存储结构两种。串的顺序存储结构就是用数组存放串的所有字符,数组有静态数组和动态数组两种,因此串的顺序存储结构也有静态数组结构和动态数组结构两种。串的链式存储结构就是把串值分别存放在构成链表的若干个结点的数据域上。根据数据域中存储的是单字符还是多字符,串的链式存储结构分为单字符结点链和块链两种。串的顺序存储结构各种操作实现方便,空间和时间的效率都更高,因此更为常用。

串的模式匹配是指在主串中从一位置开始查找是否存在和模式串相同的子串,并返回其在主串中的起始位置。Brute-Force算法和KMP算法是两种最经常使用的顺序存储结构下的串的模式匹配算法。其中,KMP算法是在Brute-Force算法的基础上的一种改进算法,特点是消除了Brute-Force算法在匹配过程失败时的指针回溯问题,从而提高了模式匹配算法的时间效率。