1.串的定义和实现
// 4.1 串的定义和实现
// 4.1.1 串的定义:串是由零个或者多个字符组成的有限序列
// 4.1.2 串的存储结构
// 1. 定长顺序存储表示:一组地址连续的存储单元
// #define MAXLEN 255
// typedef struct {
// char ch[MAXLEN];
// int length;
// }SString;
// 2. 堆分配存储表示:一组地址连续的存储单元,但是,动态分配存储单元
// typedef struct {
// char *ch;
// int length;
// }HString;
// 3. 块链存储表示
// 链表方式存储串值
// 4.1.3 串的基本操作
// StrAssign(&T, chars) // 赋值,串类型最小操作子集
// StrCopy(&T, S) // 复制
// StrEmpty(S) // 判空
// StrCompare(S, T) // 比较,串类型最小操作子集
// StrLength(S) // 求串长,串类型最小操作子集
// SubString(&Sub, S, pop, len) // 求子串,串类型最小操作子集
// Concat(&T, S1, S2) // 串联接,串类型最小操作子集
// Index(S, T) // 定位
// ClearString(&S) // 清空
// DestroyString(&S) // 串销毁
2. 串的模式匹配
3. 应用题
// 设有字符串S = ‘aabaabaabaac’,P=‘aabaac’
// 1)求出P的next数组
// 2)若S作主串,P做模式串,试给出KMP算法的匹配过程
// 1)
// a = 0
// aa = 1
// aab = {a,aa} {b, ab} = 0
// aaba = {a,aa, aab} {a,ba,aba} = 1
// aabaa = {a,aa,aab,aaba} {a,aa,baa,abaa} = 2
// aabaac = {a,aa,aab,aaba,aabaa} {c,ac,aac,baac,abaac} = 0
// a a b a a c
// 0 1 0 1 2 0
// -1 0 1 0 1 2
// 0 1 2 1 2 3
// next数组:[0,1,2,1,2,3]
// 2)
// a a b a a b a a b a a c
// a a b a a c
// a a b a a c
// a a b a a c