串的定义
串(string)是由零个或多个字符组成的有限序列,又叫字符串。
一般记为 s = “a1a2……an”(n >= 0),其中,s 是串的名称,ai 可以是字母、数字或其他字符, i 就是该字符在串中的位置。串中的字符数目 n 称为串的长度,定义谈到“有限”是指长度 n 是一个有限的数字,零个字符的串称为空串(null string) ,它的长度为零,
串的抽象数据类型
串的逻辑结构和线性表很相似,不同之处在于串针对的是字符集。也就是串中的元素都是字符。
对象不同,串的基本操作与线性表有很大差别,线性表更关注的是单个元素的操作,比如查找一个元素,插入或删除一个元素,但串中更多的是查找子串位置、得到指定位置子串、替换子串等操作。
对于不同的高级语言,其实对串的基本操作会有不同的定义方法。
串的存储结构
串的顺序存储结构
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。一般是用定长数组来定义。
串值的存储空间可在程序执行过程中动态分配而得。比如在计算机中存在一个自由存储区,叫做“堆”,这个堆可由 C 语言的动态分配函数 malloc () 和 free () 来管理。
串的链式存储结构
对于串的链式存储结构,与线性表是相似的,但由于串结构的特殊性,结构中的每个元素数据是一个字符,如果也简单的应用链表存储串值,一个结点对应一个字符,就会存在很大的空间浪费。
因此一个结点可以存放一个字符,也可以考虑存放多个字符,最后一个结点若是未被占满时,可以用“ # ”或其他非串值字符补全。如图
串的链式存储结构除了在连接串与串操作时有一定方便之外,总的来说不如顺序存储灵活,性能也不如顺序存储结构好。