1.串的定义
串(或字符串)是由零个或多个字符组成的有限序列,一般记为 s = " a 1 a 2 . . . a n " ( n ≥ 0 ) s="a_1a_2...a_n"(n\geq0) s="a1a2...an"(n≥0)。
串中任意个连续的字符组成的子序列称为该串的子串。包含子串的串相应地称为主串。通常称字符在序列中地序号为该字符在串中地位置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
称两个串是相等的,当且仅当这两个串的值相等,即两个串的长度相等且各个对应位置的字符都相等时才相等。
一个或多个空格组成的串称为空格串,其长度为串中空格字符的个数。零个字符的串称为空串,其长度为零。
2.串的类型定义、存储结构及其运算
2.1串的存储结构
1.串的顺序存储
串的定长顺序存储
#define MAXLEN 255 //串的最大长度
typedef struct
{
char ch[MAXLEN+1]; //存储串的一维数组
int length; //串的当前长度
}SString;
串的堆式顺序存储结构
typedef struct
{
char *ch; //若是非空串,则按串长分配存储区,否则ch为NULL
int length; //串的当前长度
}HString;
2.串的链式存储
当结点大小大于1时,由于串长不一定是结点大小的整数倍,则链表中的最后一个结点不一定全被串值占满,此时通常补上“#”或其他的非串值字符(通常“#”不属于串的字符集,是一个特殊的符号)。
当以链表存储串值时,除头指针外,还可附设一个尾指针指示链表中的最后一个结点,并给出当前串的长度,称如此定义的串存储结构为块链结构。
#define CHUNKSIZE 80 //可由用户定义的块大小
typedef struct Chunk
{
char ch[CHUNKSIZE];
struct Chunk *next;
}Chunk;
typedef struct
{
Chunk *head,*tail; //串的头和尾指针
int length; //串的当前长度
}LStri