数据结构总结(我的20篇博客教会你数据结构)
前言:
哈哈,你以为又是一个标题党?好吧,好像是,不不不,不是,老有用了!
本来总结要稍微晚点,但是后面想了一下,其实不需要分什么先后,如果有不妥的地方,也可以再次修改。本片博客没有相关的代码,只是数据结构知识的总结,依照严蔚敏老师的数据结构教材和我的20篇博客做的一个总结。首先,我想根据教材的目录走一篇大体的框架。大家在网上可以看到很多的网课,其中的目录也只是几个大的板块,没有什么新奇的东西。
一、博客目录
第一章 线性表
第二章 栈和队列
第三章 串、数组和广义表
第四章 树和二叉树
第五章 图
- 你想知道的深度优先与广度优先算法(搜索引擎抓取)
- 一起来创建一个无向图吧!
- 啥?移动公司要建立通信网(普里姆算法&克鲁斯卡尔算法)
- 别说了,世界那么大我想去看看!(最短路径-迪杰斯特拉算法&弗洛伊德算法)
- 从搬砖小工到工程师?(拓扑排序-AOV&AOE-关键路径)
- 六度空间理论验证图的深度优先搜索演示(邻接表存储结构)
- 图的深度优先搜索演示(邻接表存储结构)
第六章 查找
第七章 排序
另附一小图片
二、各个板块简要小结
既然是简要的小结,就不做很多细致的说明。
1)首先我们接触的就是线性表,无论是单链表还是顺序表,都有它们各自的优点。所以在学习完这个板块的知识的时候,你可以自己画表格总结一下单链表和顺序表的比较,从插入创建等时间复杂度和空间复杂度都可以来作比较,也可以说明一下它们各自的使用情况。
2)至于栈和队列,首先要明白它们最基本的存储特点,一个先进后出,一个先进先出,然后去学习的时候就思考需要什么结构可以实现这个存储方式。最后自己也可以将两者做比较,这两个在后面汇编原理,系统原理里面也会有涉及。
3)串,数组,广义表的知识其实是线性表的扩展,但是这一板块强化了结构的使用,也初步在我的博客中涉及了KMP和BF算法。
4)树而叉树这个知识点应该是基础里面最重要的,除去图论稍微有点难度,这个应该是必须要掌握的。里面的哈夫曼编码译码就很好的应用了其中的知识。
5)图论这个板块我这里的博客涉及占比比较大,因为这个在后序的很多算法知识里面都有着广泛的应用,里面的算法也都是很经典的。
6)查找这个板块在以前学习的一些基础的算法上有增加了新的东西,很多很巧妙,你想设置岗哨多么的神奇啊!
7)排序这个板块和前面的查找相关联,也是很多的排序方法的算法。
三、自我总结
对我来说,从学习C语言开始,就感到了自己编程能力的不足,到了学习C++,依旧还有这样的感觉,总觉得缺少什么,学习了数据结构和接触了算法之后,我明白自己缺少的正是这个,一个是基础,一个是核心。因为那句永恒不变的话“算法+数据结构=程序”。
我们学习的时候,首先要掌握基本的思想(熟悉其逻辑结构),然后掌握其存储结构,之后实现算法,然后进行比较练习知识点,就很好的掌握了(若要强化的话,编程是最好的选择)。
因为我们研究的不就是:
数据的逻辑结构
指反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系是指数据元素之间的前后件关系,而与他们在计算机中的存储位置无关。逻辑结构包括:
1.集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系;
3.树形结构:数据结构中的元素存在一对多的相互关系;
4.图形结构:数据结构中的元素存在多对多的相互关系。
数据的物理结构
指数据的逻辑结构在计算机存储空间的存放形式。
数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。
数据元素的机内表示(映像方法): 用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与个数据项对应的子位串称为数据域(data field)。因此,节点是数据元素的机内表示(或机内映像)。
关系的机内表示(映像方法):数据元素之间的关系的机内表示可以分为顺序映像和非顺序映像,常用两种存储结构:顺序存储结构和链式存储结构。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。
数据存储结构
数据的逻辑结构在计算机存储空间中的存放形式称为数据的物理结构(也称为存储结构)。一般来说,一种数据结构的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等。
数据的存储结构的特点是:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系;非顺序存储的特点是:借助指示元素存储地址的指针表示数据元素之间的逻辑关系。
所以来个小自我总结:
1.线性表部分个人觉得单链表是很重要的,因为顺序表基本每个人都会,也没有什么需要解释的,按照上面的,知道存储结构之后,算法无非就是创建,插入,删除,排序等等。
2.至于栈和队列,除了思想之外,编程实例是很重要的,比你一直看书总结要来的快。
3.串、数组和字符串,这里我们需要掌握KMP字符串匹配算法。
4.树和二叉树,这个章节在我的算法专栏里离散数学里也有提到,我们只要会博客中的两个基本程序,也就差不多了(二叉树基本操作和哈夫曼编码译码)。
5.图论部分是真的很重要,到后面算法的动态规划可以回重新涉及。
6.查找和排序需要认真的做一下总结,总结一下什么情况哪一个比较试用,然后在练习中进步。
后记:
这篇博客到这里就结束啦,有什么不对的可以评论,之后如果发现有问题也会即使的修改。另外加一句,真的看了这20篇博客并且自己动手编程实例,那么你真的已经懂了数据结构了(嘻嘻,不夸了)。