数据结构(四) - 串、数组、矩阵
串:内容受限的线性表
数组和广义表: 线性结构的推广
串的定义
串(String) ---- 零个或多个任意字符组成的有限序列
子串:
串的相关术语:
串相等:
串中元素逻辑关系与线性表的相同,串可以采用与线性表相同的存储结构
串的顺序存储结构
串的链式存储结构
块链结构:
串的模式匹配算法
算法目的:确定主串中所含子串(模式串)第一次出现的位置(定位)
算法应用: 搜索引擎、拼写检查、语言翻译、数据压缩
算法种类:
- BF算法(Brute-Force, 又称古典的、经典的、朴素的、穷举的)
- KMP算法(特点: 速度块)
BF 算法
设计思想:
案例:
算法步骤:
关键点:
-
当发现不匹配时,i回溯的索引怎么计算? i-j+2
-
如果匹配到,返回的索引是哪个? i-T.length
最坏时间复杂度:
KMP(Knuth Morris Pratt)算法
案例:
可以抛弃主串,主要研究子串,重点在寻找子串中的公共前后缀
当公共前后缀的长度为0,则让子串的第一位与主串的下一位进行比较(后移)
注意j的位置:等于公共前后缀的长度+1
简单易懂版:
https://www.bilibili.com/video/BV1jb411V78H?spm_id_from=333.337.search-card.all.click
next 数组:
数组
定义:
二维数组:
三维数组:
空间地址计算:
- 一维数组
数组的顺序存储
二维数组的存储方式:
-
行序
-
列序
二维数组存储地址的方式:
a[m][n]:
m是行数,代表a[m][n]前面有多少行,
n是列数,代表第m行 , a[m][n]前面有多少个元素
m*n+n : a[m][n]前面所有的元素个数
案例:
矩阵
矩阵: 一个由m * n 个元素排成的m行n列 的表
- 特殊矩阵的压缩存储
特殊矩阵的压缩存储
- 对称矩阵
存储位置计算:
- 三角矩阵
- 对角矩阵
稀疏矩阵
- 稀疏矩阵的压缩存储方法 --- 顺序存储结构
三元组顺序表:
例:还原出三元组所表示的稀疏矩阵
三元组顺序表的优缺点:
- 稀疏矩阵的链式存储结构 --- 十字链表
例1:
例2:
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/16101804.html