串、数组和广义表
广义表被鸽了,暂时就不提它,总结一下串和数组的心得。
串
串本身不难,好比字符数组,都是我们所熟悉的。难得是与其相关的算法,例如KMP算法。
对于KMP算法,难点在于next数组的取得与使用。
点击跳转:基于KMP算法的字符匹配问题
以上是个人的一些见解,当然是参考别人的博客之后的....
数组
至于数组,这里主要研究二维数组的应用,比如用三元组表压缩存储。
由于书里连ADT都没有,只能自己摸索着定义了....(还不是为了PTA的题目QAQ)所以就稍微详细说一下
例:用三元组表压缩存储稀疏矩阵
//定义三元组表的单个结点
typedef struct {
int row; //所在行
int column; //所在列
int value; //值
}Node;
//定义三元组表
typedef struct {
int rows; //总行
int columns; //总列
int nums; //非零元素个数
Node data[100]; //非零元素
}tupleTable;
三元组表收先要有个表的信息,包括矩阵的行、列,非零元素的总个数。然后才是里面的具体数值。
具体数值含有这个非零元素的具体信息,包括这个元素的所在行、所在列、它的值。所以用单个数据类型肯定是行不通的,要额外定义结构体,我们就叫它结点吧。
然后在三元组表里加入这个结点类型的数组,就能实现存储了。如果要查询输出,遍历tupleTable.data[i].value就行了。
AI代码
难得梅姐带着我们打代码,体会了整个解题过程,所以印象很深。一个点一个点进行,在过程中对程序进行优化,及时指出错误与不足。
点击跳转:手把手教你过AI核心代码
这种经历是十分难得的,无论是对于解题思路的梳理、还是代码的实现都是有很大好处XD
目标
之前学习了栈和队列,因为没有具体实现其各个功能而感到遗憾,于是就额外花时间将单链表基本功尽量去实现,效果不错,对单链表的理解也更加深刻,所以上周的目标也有好好实现呢。
点击跳转:单链表功能实现
接下来的计划是对STL进行一个了解与学习,特别是、和。在学习各种函数用法的时候也尽量去看看源码,从最底层向上理解。不管是对基本的数据结构还是对PTA解题都会是个不错的助力。