文章目录
一. 思维导图
二. 串的概述
1. 串(字符串/string)定义
来源:
- 计算机上非数值处理的对象基本都是字符串数据
定义
- 字符串是由零个或多个字符组成的有限序列
- 串是内容限制为字符数据的线性表
- 一般记为:
什么是子串?
- 串中任意多个连续的字符组成的子序列
什么叫主串?
- 包含子串的串
什么叫字符的位置
-
某个字符在串中的序号称为该字符再串中的位置
-
子串在主串中的位置以子串的第一个字符在主串中的位置来表示
串A='China Beijing' 长度为13 串B='Beijing' 长度为7 串C='China' 长度为5 B和C是A的字串,B在A中的位置是7,C在A中的位置是1
什么叫串相等?
- 当两个串长度相同且对应位置的字符都相等多
2. 串与线性表的对比
逻辑结构上
- 串的数据对象限定在字符集
基本操作上
- 线性表主要以单个元素作为操作对象(增删改查)
- 串以子串作为操作对象(增删改查)
三. 串的存储结构
1. 定长顺序存储表示
定义
- 用一组地址连续的存储单元存储串值的字符序列
- 每个串变量占有固定长度的存储区,即定长数组
串的实际长度
- ≤预定义长度MAXLEN,超过的部分被截断,舍弃
- 解决被截断的方法,使用动态分配字符串大小
串长的表示方法:
- 1)加一个额外变量len
- 2)在串值后面加一个不计入串长的结束标记字符"\0"(这时串长为隐含值)
串的算法操作
添加代码
2. 堆分配存储表示
定义:
- 以一组地址连续的存储单元存放串值的字符序列,但是他们的存储空间在程序执行过程中动态堆分配得到的
什么叫堆分配
- C语言中,有一个堆的自由存储区,用malloc()和free()函数来完成动态存储管理
- 利用malloc()为每个新产生的串分配一块实际串长所需的存储空间,分配成功返回一个指向起始地址的指针,作为串的基地址;分配失败返回NULL,以及分配的空间可以使用free()释放掉
串的算法操作
添加代码
3. 块链存储表示
定义:
- 采用链式方式存储串值,每个结点既可以是存放一个字符,也可以存放多个字符
- 每个节点称为块
- 整个链表称为块链结构
四. 串的模式匹配
1. 定义
- 子串的定位操作称为串的模式匹配
- 就是求子串(模式串)在主串中的位置
2. 模式匹配的算法
(1). 暴力匹配算法
(2). KMP算法(next数组)
(3). KMP算法优化(nextval数组)
未完待续…