数据结构:第四章学习小结

        第四章学习了讲了串、数组和广义表。

在开始第四章学习之前,我们对上次的小组讨论进行了总结和学习,我们组使用了链表去写代码,并且按照一定的顺序存储,所以在第二轮的输入中我们直接按编号找到已存在的链表并将积分输入对应结点。不过在输出的环节中我们却没找到简便方法,只能每一次从头开始挨个对比。

 

一、串的部分主要学了模式匹配,有BF和KMP两种算法。

BF算法是一种比较“简单粗暴”的算法,就是将子串(m)和主串(n)一个个进行对比,但这样的方法虽然我们写起来简单,电脑的运算量却很大,时间复杂度为O(m*n);

而KMP算法虽然在思考的过程与打代码的过程中比较麻烦,却能为运行代码省去很多不必要的麻烦,可以将时间复杂度降为O(m+n)。这个方法用到了next函数,虽然看了视频和书,但是还是不是很明白是怎么运行的(头秃预定),希望老师在课堂上能再cue一下这个函数~

关于这个地方我还有一个比较迷惑的点就是为什么要将字符串转换成字符数组进行处理,直接在字符串上进行匹配操作不可以吗?

二、关于数组:

     高级语言中数组是顺序存储,但在本章数组也可以是链式存储

      特殊数组有稀疏矩阵、对角矩阵等等,这种时候可以对他们进行压缩,这个结构体

typedef struct{
   int lines;
   int columns;
   int  t;//非零元素个数,不给确定值是因为不知道实际个数,若给他最大空间则起不到压缩作用
   node *data;
}triple

    

三、关于广义表:

       1、广义表中大写字母表示广义的名称,小写字母表示原子

     A()             A是个空表

     B(e)           B只有e一个元素

     C(a,C)       C是一个递归的表,是无限的广义表

        2、广义表中除了表头就是表尾

例:C的表头是a, 表尾是C

       3、存储结构

     头尾链表(包括表结点及原子结点,表结点有三个域(标志域、指示表头的指针域、指示表尾的指针域),原子结点有两个域(标志域和值域))

      扩展性链表(表结点和原子结点都有三个域)

posted on 2020-05-05 15:43  侯艺雯  阅读(170)  评论(0编辑  收藏  举报