数据存储 的目的是便于数据访问,这个关系就是数据结构面试
算法 是计算机解题的模型:输入,输出,顺序执行,跳转,循环,分支,有限步骤算法
人大脑组织数据的方式有线,树,图三种逻辑结构,而计算机存储采用顺序,链式和二者混合的方式。前者是概念性的东西,后者是物理实现。数据结构
线形结构:算法是迭代算法,你只要注意规模最小的状况下不出错,则算法通常不出错。数据结构和算法
树形结构:算法是递归算法,你只要运用递归组合的方法,将简单情形组合出复杂情形,简单情形不出错,则算法通常不会出错。学习
简单情形不出错,则算法通常不会出错。
图形结构:DFS:将图按照树形结构来处理,运用递归算法
BFS:将图按章线形结构来处理,运用迭代算法
必须会下面几个几个算法:
(线形两个)
1.将两个有序表合并为一个表,这个算法的变种不少,能够是链表,顺序表。涉及集合运算,
归并排序,字符串处理。
2.将一个顺序表的元素从新划分,左边的较小,右边较大。涉及快速排序,求字符串的逆串。
(树形若干个)注意:有些能够实现,有些实现不了,能够拿来思考。
3.前序线索化,递归实现,栈模拟递归,非栈式迭代实现。
4.中序线索化,递归实现,栈模拟递归,非栈式迭代实现。
5.后序线索化,递归实现,栈模拟递归,非栈式迭代实现。
(图形)注意:会画表格,写出算法的逐个步骤便可。
6.MST:prim,kruskal
7.short path:Dijkstra ,Floyd
8.AOV:拓扑排序的DFS,BFS实现
9.AOE:关键路径
严蔚敏数据结构应该怎么学习。 google
Google 上关于数据结构与算法的回答: url
我屡次在google面试或者毕业招聘的时候看到这样的情形:学习数据结构和算法--CS课程里面几乎最重要的课程--的方式很不科学!!
到不是说你们用的书或者老师用的材料不对,而是说学生们对于这些课程自己的理解很是缺少. spa
打好数据结构和算法基础的关键并不在于对于全部数据结构的细致的了解,不是记住每个大O值或者摊余成本..((@_@;)? [不懂]).
若是这些知识你都掌握了,固然很棒而且能够给人留下很深的印象,可是你基本上用不着啊!
你的职业生涯中或许永远都不会要求你实现一个红黑树删除节点的算法.可是!你必须有能力并且手起刀落轻轻松松的识别出何时使用二叉树更简单更有效, 由于你十分须要这样的技巧. 排序
因此,不要试图记住全部的东西.而是从基础开始,作两件事: 递归
我在google面试的时候,我常常会问一个能够由二叉树搜索解决的问题. 好的应聘者能够几分钟内就能够想到用二叉树来解决,并且对于个人其余问题也差很少10-15分钟就能够解决.固然,偶尔会有一个应聘者,他能直观的认识树这种结构,并且能够把个人问题形象化,图形化的描述出来.固然他或许对于某些操做的时间复杂度不甚了解,可是对于问题他却能够立马回应,由于他们脑壳里就有这样的树结构啊~因此他也能拿到工做啊.
至于书嘛,只推荐一本--- <算法导论>
若是你想要一本有不少例子而且和语言相关的书的哈u,我就推荐 <Algorithms in C++ ><Algorithms in Java> 固然我仍是更推荐<算法导论>,不过这些也是很好的教辅书啦~
给一个小小的建议:学数据结构的时候,不要陷入C语言的思惟(固然,也不要陷入其余语言的思惟)
经过上面几步学习,基本上就掌握的比较好了,即使过了一段时间,也不会忘的一干二净;
对于某个数据结构,几步:
一、理解该数据结构的基本概念(定义、实现)
二、尝试理解这个数据结构的意义(为何它会被发明)
三、用这种数据结构解决一些对应的例题(书本上的习题、Online Judge上的水题)
四、尝试用这个数据结构解决一些以往你用别的数据结构解决的问题,可否解决,为何。
五、再次尝试理解这个数据结构的意义
六、尝试改变这个数据结构以应对各类现实的问题(Online Judge的好题)
八、学好数学,别数都不会数。
注:以上回答取材出自知乎 :http://www.zhihu.com/question/19830721