第四章 串
串的定义和实现
串的定义
- 串是由0个或者多个字符组成的有限序列,一般记为S=‘a1a2a3…an’
- 串中多个连续的字符组成的子序列称为该串的子串,包含子串的串称为主串
- 空格串:一个或者多个空格组成的串称为空格串(不是空串)
串的存储结构
- 定长存储表示
### //串的定长顺序存储
#define MAXLEN 255
typedef struct {
char ch[MAXLEN];
int length;
}SSTring;
- 堆分配存储表示
//堆分配
typedef struct {
char* ch; //地址连续的存储单元存放串值,但是他们的存储空间是动态得到的
int length;
};
- 块链存储表示:用链表方式存储串值,每个结点可以存放一个字符也可以存放多个字符,每个结点称为一个块,整个链表称为块链结构,不满的地方用#补上
串的基本操作
串的模式匹配
简单模式匹配算法
求子串在主串中的位置
//简单模式匹配算法
int Index(SSTring S, SSTring T) {
int i=j=1;
while (i <= S.length && j <= T.length) {
if (S[i] == T[j]) {
++i;
++j;
}
else {
i = i - j + 2;
j = 1;
}
}
if (j > T.length)
return i - T.length;
else
return 0;
}
改进的模式匹配算法
//KMP模式匹配算法
int IndexKMP(SSTring S, SSTring T) {
int i=j=1;
while (i <= S.length && j <= T.length) {
if (S[i] == T[j]) {
++i;
++j;
}
else {
j = next[j];
}
}
if (j > T.length)
return i - T.length;
else
return 0;
}