# 串
# 串的定义
- 串:(String)零个或者多个任意字符组成的有限序列
- 相关术语:
- 子串:一个串中任意个连续字符组成的子序列称为该串的子串
- 真子串:不包含自身的所有子串
- 主串:包含子串的串相应的称为主串
- 字符位置:字符在序列中的序号为该字符在串中的位置
- 空格串:由一个或者多个空格组成的串,与空串不同
- 串相等:当且仅当两个串的长度相等并且各个位置对应的字符都相等时,这两个串才是相等的
# 串的类型定义、存储结构及其运算
# 串的类型定义
ADT String {
数据对象:
数据关系:
基本操作:
}
# 串的存储结构
- 顺序存储结构:顺序串
- 链式存储结构:链串
# 串的模式匹配算法
# BF 算法
- BF 算法:称为简匹配算法,采用穷举法的思路
- 算法思路:
- 将主串的第 pos 个字符和模式串的第一个字符比较
- 若相等,继续逐个比较后续字符
- 若不等,从主串的下一个字符起,重新与模式串的第一个字符进行比较
- 时间复杂度:
# KMP 算法
- KMP 算法:利用已经部分匹配的结果而加快模式串的滑动速度,且主串 S 的指针不必回溯,可使时间复杂度达到
# 数组
# 数组的定义
- 数组:按照一定格式排列起来的,具有相同类型数据元素的集合
- 一维数组:线性结构的数组
- 二维数组:若一维数组中的元素有事一个一维数组结构,则称为二维数组
- 二维数组的逻辑结构:
- 非线性结构:每个数据元素既在行表中,又在一个列表中
- 线性结构:该线性表的每个元素也是一个定长的线性表
# 广义表
# 定义
广义表:又称为 Lists,是 n 个元素的有限序列,其中每一个元素都是原子,或者是一个广义表
# 性质
- 广义表中的数据元素有相对次序,一个直接前驱和一个直接后继
- 广义表的长度定义为最外层所包含的元素个数
- 广义表的深度定义为该广义表展开后的所包含括号的重数
- 广义表是一个可以递归的表(类似树)