数据结构:第四章学习小结
1.第四章学习了串、数组和广义表,其中重点在串的模式匹配算法,其次是特殊矩阵的压缩存储。串的模式匹配算法中最难理解的就是KMP算法了,虽然我反复看了三遍SPOC上的教学视频,但仍未能完全吃透这个算法,在网上搜索后,意外发现一位博主给出的解释,一下次又恍然大悟了,但是要说能自己打出整个函数,那还是有点困难。
2.在做PTA作业的题目时,本着侥幸心理,我一开始还是选择了BF算法,却遇到了三个问题:第一个当然就是运行超时的问题啦,令我没想到的是第二个问题:我参照书上的代码,让i,j从1开始,却导致了测试点1答案错误,将它们改为0并改变相关数据后又通过了,这一个问题我还是挺纳闷。第三个问题是在我打代码的过程中出现的,就是使用char型数组还是string变量,一开始我跟着SPOC视频使用了char型数组,但在输入的环节却卡了很久,因为我也用的是char*来表示数组,但到了需要分配空间时我又发现运用malloc函数也是要我指定空间大小的,那我还不如用string,在这个问题上我也是折腾了半天,深深体会到了了解类型之间的区别的重要性,查阅资料我也记下了输入字符串cin、cin.get()、cin.getline()、getline()、gets()、getchar())的区别,其中cin.get()、cin.getline()、gets()、getchar()都(我不确定是不是只能)用于接收char型变量或数组,getline()可用于接收string类型变量,但是我觉得直接用cin更方便。
3.在心得体会中提到的字符串输入的几种方式,我看的是这篇博文:https://blog.csdn.net/ahzz123/article/details/70495617
帮助了我理解KMP算法的博文是这篇:
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
其中在解释next函数时,文中提到了前缀和后缀这样的概念非常清晰形象。
4.上一阶段的目标我完成得还不是很好,因为脑中对于所学知识没有一个系统的概念,很容易将知识点弄混,所以打代码的效率还是没能提高,但是在看代码错误这方面还是有所改进。为了解决现在的问题,接下来我需要将所学知识,尤其是在开辟空间和字符串这两方面好好回顾并思考,整理出清晰的思路,并在回顾同时联系线性表、栈、队列、数组来加深理解。