一、串的定义
由0-n个字符组成的有限序列。(n>=0)
二、串的相关术语
1、子串
串中任意个连续字符组成的子序列成为该串的子串。
2、主串
包含子串的串成为主串。
3、字符位置
字符在序列中的序号为该字符在串中的位置。
4、子串位置
子串第一个字符在主串中的位置。
5、空格串
一个或多个空格组成的串。和空串不同。
6、串相等
两个字符串的长度相等且每一位上的字符都相等。
7、空串
不存任何字符的序列。所有空串相等。
三、串的存储结构
1、顺序串
(1)顺序串结构体
#define SqStrSize 10
//顺序串
typedef struct SqStr
{
char StrArray[SqStrSize];
int SqStrLen;
}SqStr;
2、链串
(1)链串结构体
//链串
typedef struct LinkStrNode
{
char c;
struct LinkStrNode* NextPtr;
}LinkStrNode,*LinkStrNodePtr;
typedef struct LinkStr
{
LinkStrNodePtr HeadPtr;
LinkStrNodePtr TailPtr;
int LinkStrLen;
}LinkStr;
(2)块链结构体
#define ChunkSize 10
//块链
typedef struct ChunkNode
{
char StrArray[ChunkSize];
struct ChunkNode* NextPtr;
}ChunkNode,*ChunkNodePtr;
typedef struct ChunkLink
{
ChunkNodePtr HeadPtr;
ChunkNodePtr TailPtr;
int ChunkLinkLen;
}ChunkLink;
3、存储密度对比
存储密度公式:存储密度 = 串值所占的存储 ➗ 实际分配的存储。
例如存储100个字符:
(1)顺序串存储密度=100除以(100+4)≈ 0.96(int类型4个字节)
(2)链串存储密度 = 100除以((1+4)*100)= 0.2(一个节点有一个指针域,一个指针占4个字节)
(3)块链存储密度 = 100除以((10+4)*10)≈ 0.71(一个节点有一个指针域,一个指针占4个字节,假设一个数据域存储十个字符,一共10个节点可以存100个字符)
四、字符串匹配算法
字符串匹配算法可以参考之前写的文章《leecode-C语言实现-28. 找出字符串中第一个匹配项的下标》,里面有BF算法介绍和KMP算法具体实现以及个人理解。