串
串的定义
串是由零个或多个字符组成的有限序列,又叫字符串。
一般记为 s=“a1a2……an”(n>=0),其中,s 是串的名字,用双引号括起来的字符序列是串的值,双引号不属于串的内容。a1 可以是字母、数字或其他字符,i 就是该字符在串中的位置。串中的字符数目 n 称为串的长度,定义中谈到“有限”,指的是长度 n 是一个有限的数值。零个字符的串称为空串,它的长度为零。所谓序列,说明串的相邻字符之间具有前驱和后继的关系。
空格串,是只包含空格的串。空格串与空串不同,空格串是有长度的,而且可以不止一个空格。子串和主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应的,包含子串的串称为主串。
子串在主串中的位置就是子串的第一个字符在主串中的序号。
串的比较
串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号。
C 语言中,比较两个串是否相等,必须是它们的串是否相等,必须是它们串的长度以及它们对应位置的字符都相等时,才算是相等。即给定两个串:s=“a1a2……an”,t=“b1b2……bm”,当且仅当 n = m,且 a1 = b1 ,a2 = b2,……,an=bm 时,我们认为 s=t。
串的存储结构
串的存储结构与线性表相同,分为两种。
串的顺序存储结构
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。一般是用定长数组来定义。
串的链式存储结构
对于串的链式存储结构,与线性表是相似的,但由于串结构的特殊性,结构中的每个元素数据是一个字符,如果也简单的应用链表存储串值,一个结点对应一个字符,就会存在很大的空间浪费。
因此,一个结点可以存放一个字符,也可以考虑存放多个字符,最后一个结点若是未被栈占满时,可以用“#”或其他非串值字符补全。
这里一个结点存多少字符才合适就变得很重要,这会直接影响着串处理的效率,需要根据实际情况做出选择。
但串的链式存储结构除了在连接串与串操作时有一定方便之外,总的来说不如顺序存储灵活,性能也不如顺序存储结构好。
书本大话数据结构上的匹配部分迁移到算法笔记中