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

1.内容小结:

本章学习串,数组以及广义表,学习重点主要是串和数组。

1.1 串:

串的定义:由零个或多个字符组成的有限序列(这里是狭义的串,泛指编程中的字符串)。

串的存储结构:顺序存储和链式存储,串的顺序存储结构是指串中的字符被依次的存放在一组连续的存储单元中,可以比线性表的顺序存储结构;串的链式存储结构可由单链表实现,链表中的每一个节点包括两个部分:数据域(存放字符)和指针域(存放指向下一个节点的指针,链式存储存在“节点大小”的问题,当节点大小大于1时,由于串长不一定是节点大小的整数倍,链表中的尾节点不一定全被串值占满,这时应该补上“#”或其他非串值字符。

实际应用中,考虑到存储效率和算法的方便性,串的实现多用顺序存储结构。

串的模式匹配:主要学习两种算法:bf算法和kmp算法。bf算法的优点很明显,简单易懂,缺点也很突出,O(n*m)的时间复杂度决定了它面对极端情况(数据量庞大并且每次失配都发生在模式串的最后一个字符)会不尽人意。kmp算法晦涩难啃,充斥着大量的数学知识(每每遇到这种算法都要膜拜一下前人,同时坚定了自己以后不适合走算法岗的想法),kmp通过每次失配获得的信息,跳过那些绝不可能成功的字符串比较,换来了O(n)的时间复杂度。

1.2 数组:

本章的数组并不是编程语言中的数组,而是一种数据结构,同样也有顺序存储和链式存储两种实现方法,只不过,数组一般不做插入或删除操作,多采用顺序存储来表示数组。需要注意的是,无论数组是多维的结构(逻辑上),在计算机的存储单元中,总是一维连续来存储数组元素的,元素的存储位置都可以通过计算获得。

1.3 广义表:

课本只是简单介绍,自己也还未深入地了解,以后有进一步学习再做补充。

2.心得体会:

在7-1 串的模式匹配中,我先后用了bf和kmp,通过测试点,确实看得出kmp算法在处理极端情况下(数据大、尾字符)的优势,用一点点空间(主要是next数组)换来了时间的大大减少。

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

 

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

但是,我又想为什么kmp这么强大,c++库函数中的strstr函数为什么不是用kmp实现,通过查资料,发现在一般的环境下,strstr的表现是要比kmp优秀的,因为实际应用中很少出现每次失配都在尾字符的情况,标准的库函数应该是更加注重一般的情况。当然这还只是猜想,还要继续查资料才能知道正确答案。

3.资料推荐:

C++Primer Plus,虽然看得还不多,但感觉对深入理解c++挺有帮助的。

4.上阶段的完成情况及后续目标:

上阶段的目标是学好第四章,因为最近临近期中考,以及参加社团内部的比赛,多多少少懈怠了数据结构的学习,像kmp算法和广义表,都还没能很好地理解。

希望接下来能查漏补缺,合理分配时间,梳理好第四章、学好第五章。

原文链接: https://www.cnblogs.com/skipper-/p/12833701.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/346537

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午3:57
下一篇 2023年3月2日 上午3:57

相关推荐