第四章学习笔记

第四章学习内容:

  一、串

    线性表的一种,一般指字符串。有两种存储方式:

      顺序存储(相当于存字符的一维数组):

        [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。

 

posted @ 2020-05-05 21:53  黄浚泓  阅读(210)  评论(0编辑  收藏  举报