当前位置:   article > 正文

数据结构与算法基础-学习-14-线性表之串与字符串匹配算法(BF、KMP算法)_顺序串和链串

顺序串和链串

一、串的定义

由0-n个字符组成的有限序列。(n>=0)

二、串的相关术语

1、子串

串中任意个连续字符组成的子序列成为该串的子串。

2、主串

包含子串的串成为主串。

3、字符位置

字符在序列中的序号为该字符在串中的位置。

4、子串位置

子串第一个字符在主串中的位置。

5、空格串

一个或多个空格组成的串。和空串不同。

6、串相等

两个字符串的长度相等且每一位上的字符都相等。

7、空串

不存任何字符的序列。所有空串相等。

三、串的存储结构

1、顺序串

(1)顺序串结构体
  1. #define SqStrSize 10
  2. //顺序串
  3. typedef struct SqStr
  4. {
  5. char StrArray[SqStrSize];
  6. int SqStrLen;
  7. }SqStr;

2、链串

(1)链串结构体
  1. //链串
  2. typedef struct LinkStrNode
  3. {
  4. char c;
  5. struct LinkStrNode* NextPtr;
  6. }LinkStrNode,*LinkStrNodePtr;
  7. typedef struct LinkStr
  8. {
  9. LinkStrNodePtr HeadPtr;
  10. LinkStrNodePtr TailPtr;
  11. int LinkStrLen;
  12. }LinkStr;
(2)块链结构体
  1. #define ChunkSize 10
  2. //块链
  3. typedef struct ChunkNode
  4. {
  5. char StrArray[ChunkSize];
  6. struct ChunkNode* NextPtr;
  7. }ChunkNode,*ChunkNodePtr;
  8. typedef struct ChunkLink
  9. {
  10. ChunkNodePtr HeadPtr;
  11. ChunkNodePtr TailPtr;
  12. int ChunkLinkLen;
  13. }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算法具体实现以及个人理解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/538434
推荐阅读
相关标签
  

闽ICP备14008679号