第四章学习笔记
第四章学习内容:
一、串
线性表的一种,一般指字符串。有两种存储方式:
顺序存储(相当于存字符的一维数组):
[char1, char2, char3...charn]
链式存储(相当于data域为字符的链表):
[char1]->[char2]->[char3]->...->[charn]->NULL
二、数组
使用顺序存储。
一维数组:
[E1, E2, E3...En]
二维数组(矩阵):
arry[m, n]=
[E11, E12, E13...E1m
E21
E31
...
En1, En2, En3...Enm]
矩阵的压缩:
一般对于两种矩阵可进行压缩:
特殊矩阵:
1.对称矩阵(元素以主对角线为对称轴对应相等的矩阵):
2.对角矩阵(除主对角线之外其他元素都为0的矩阵):
3.三角矩阵(主对角线以下或以下元素全为0的矩阵):
稀疏矩阵:
矩阵中存在极少量非零元素,可使用三元组、十字链表等进行压缩。
三、广义表
元素拥有自身结构的列表,线性表的推广,是非线性表。
难点:
一、KMP算法
用于串的模式匹配的算法
算法流程:
设有主串str,子串pat。
1.扫描子串pat,生成储存子串内重复模式的数组next:
pat: [1 6 3 0 6 1 0 8 7 1 6 3 9 4 6]
next:[-1 0 0 0 0 0 1 0 0 0 1 2 3 0 0]
^ next[12]
next数组表示字串[ 0 : i-1 ]切片上的首尾两端相同模式的最大长度。
如next[12] 表示[1 6 3 0 6 1 0 8 7 1 6 3 9]首尾有长度为3的相同模式[1 6 3]。
2.遍历主串,利用next数组来将指向子串pat的指针回退到串首相同模式上,所以指向主串str的指针可以保持一直向前不回退。
3.若指向子串pat的指针到达pat尾端,返回此时指向主串str的指针位置。
4.若指向主串str的指针到达str尾端,返回0。