数据结构第四章小结

  第四章首先学习的是比较熟悉的字符串。虽然感觉对字符串有一点了解,但是这次学习也是让我对字符串有了新的认识。以前只会用string,char[],这次学习了串的存储结构。串的存储结构分为顺序存储和链式存储。串的定长顺序存储和顺序表的定义其实是类似的。不过顺序表的定义里面是一个整型的数组+长度,顺序串是一个字符数组+长度,操作基本相同。如果顺序串的长度没有确定,需要根据实际所需动态地分配和存储空间,就可以运用串的堆式顺序存储结构。

(串的定长顺序存储结构)

 

(串的堆式顺序存储结构)

 

串的链式储存结构与单链表(增加了头尾指针)也是类似的。串的链式存储结构在每一个结点里面存放一个或多个字符。串的链式存储结构与顺序存储结构相比,如果是存储密度小时,链式串会比较方便,但在实际中,串的往往很长很多,这就会占用很多的存储空间,相比之下顺序串就更加灵活。

  接下来就是最重要的串的模式匹配。串的模式匹配有两种算法,暴力破解法和kmp算法。暴力破解法比较容易理解,直接从首个字符开始比较,设两个字符串的长度分别是主串m和子串n,时间复杂度为O(m*n)。暴力破解法在很多时候是能够解决问题的,但是当主串和子串都很长的时候,时间复杂度就会很大,会导致运行超时。kmp算法就可以解决这样的问题。理解kmp算法主要是要理解match函数,match函数只与子串有关。其实就是比较包括第一个字符的最长前缀和包括最后一个字符的最长后缀是否相同,然后得出长度。这样能够减少很多的重复工作,提高效率。kmp算法的时间复杂度是O(m+n)。

  然后在书里学习了数组。特殊矩阵的压缩存储结构--当矩阵中有很多值相同的元素或者是0元素。特殊矩阵包括对称矩阵,三角矩阵,对角矩阵。广义表是线性表的推广,是一个递归的定义。

  小结:在打pta的时候运用了bf算法存在运行超时,原因我认为是数据太大了导致超时,最后改用kmp算法,还是没有通过!!想了很久,才想起在串里从1下标开始,所以数组的最大长度还得+1!!!然后在打题的时候发现最近学的有点多,都有点混乱了,各种表,栈,队列以及他们的储存结构和操作应该再去整理一下!!还有一些理论的知识总是有点一知半解,还是要多看书多看书多看书,多打题巩固一下操作。发现翻了一下自己前几个星期的代码,觉得可以改进一下!!

 

posted @ 2020-05-05 21:33  彭珊珊  阅读(197)  评论(0编辑  收藏  举报