数据结构与算法(五)—— 串、数组和广义表
串的模式匹配:BF算法
串的定义
1 |
|
DF算法
1 | int index_BF(SString A,SString B){ |
主函数内容
1 | int main(){ |
串的模式匹配:KMP算法
求next数组
一个讲的通俗易懂的课:KMP算法
步骤:
- 找到ch[n]位置前的最长公共前后缀,记录串长n,(n+1)为此位置next值
- CH[1]的next规定为0

求nextval数组
将ch[i]与ch[next[i]]比较。不相等,则nextval[i] = next[i];相等,则nextval[i] = next[next[i]]。
特殊矩阵压缩存储
对称矩阵/三角矩阵
以行序为主序:
$对角矩阵数组下三角部分[k]= \frac{(i-1)*(1+(i-1))}{2} + (j-1)$
上三角部分交换i,j即可
对于三角矩阵:
$下三角矩阵[k]= \frac{(i-1)*(1+(i-1))}{2} + (j-1)$
$上三角矩阵[k]= \frac{n*(n+(n-(i-1)+1))}{2} + (j-1)$
注意:三角矩阵需要额外一个存储常数c的位置
$k= \frac{n*(1+n)}{2} + 1$
稀疏矩阵:非零元素<=5%的矩阵
有序的双下标法
由三元组{(row,col,$a_{ij}$)}和矩阵维数(row,col)表示
通常在三元组下标为0的位置存放总行数,总列数,总非零元素个数等信息。
- 优点:非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算
- 缺点:不能随机存取,若按行号取某一行中的非零元,则需从头开始查找
十字链表法

广义表
- 取表头:取第一个元素
- 取表尾:取除了第一个元素外其他元素组成的表
- 求表长:所包含元素个数(最外层逗号间隔出的元素个数)
- 求表深:最大的括号层数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 HaruYuki's Blog!








