前几天信息满满的参加了个实习的面试,没想到技术面就跪了,原因就是面试官让我手写一个双向链表的程序。。。唉从这时深刻意识到数据结构的重要性,从现在起要好好学,希望能以博客的形式来记录学习历程,也作为一个督促我学习的方式吧。希望能在秋招时可以大展身手,或许塞翁失马焉知非福就是这样吧。
这段时间也看了好些关于数据结构的学习方法,尤其是今晚看到一个论坛里的帖子,楼主总结了自己的经验,让我觉得挺受启发,简单摘录一些作为记录。
帖子地址是:http://cskaoyan.com/thread-77099-1-1.html,下面是部分摘录。
数据结构其实就是人脑中的三种逻辑模式:先后关系(线性表)、层次关系(树)、交互关系(图)如何用计算机存储模式(顺序存储、链式存储)来实现。在这个过程中需要考虑两个问题:
1、这种存储如何同人脑中的思维达到融合,方便人解决问题
2、数据存储的目的和意义在于数据访问,数据访问决定数据存储。因此,访问速率和存储速率必须有所取舍
算法,则是计算机解题模式,无非是存取,计算,顺序执行,跳转,迭代和递归等
在这里推荐掌握下面几个算法:
1、将两个有序表合并为一个表,这个算法的变种很多,顺序表和链式表都可以,涉及集合运算,归并排序,字符串处理等。
2、将一个顺序表的元素重新划分,左边的较小,右边的较大,涉及快速排序,求字符串的逆串等
3-5、前序线索化,递归实现,栈模拟递归,非栈式迭代实现,以及中序,后序
6、深度优先遍历
7、广度优先遍历
8、最小生成树:Prim算法,Kruskal算法
9、最短路径:Dijkstra算法,Floyd算法
10、AOV:拓扑排序的DFS,BFS实现
11、AOE:关键路径
递归算法的设计关键:1、递归组合定义 2、最简单情形处理 3、用简单情形构造复杂情形 难点是相处递归组合
迭代算法的设计关键:1、迭代终止条件 2、规模最小情形 3、按一定次序访问
迭代算法出错几率最大的地方是迭代终止条件错误,按序访问无法到达最小规模或超出最小规模。