关于数据结构(一)

问题:怎么学好数据结构?

回答一:

数据存储 的目的是便于数据访问,这个关系就是数据结构面试

算法 是计算机解题的模型:输入,输出,顺序执行,跳转,循环,分支,有限步骤算法

人大脑组织数据的方式有线,树,图三种逻辑结构,而计算机存储采用顺序,链式和二者混合的方式。前者是概念性的东西,后者是物理实现。数据结构

线形结构:算法是迭代算法,你只要注意规模最小的状况下不出错,则算法通常不出错。数据结构和算法

树形结构:算法是递归算法,你只要运用递归组合的方法,将简单情形组合出复杂情形,简单情形不出错,则算法通常不会出错。学习

简单情形不出错,则算法通常不会出错。
图形结构: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语言的思惟(固然,也不要陷入其余语言的思惟)

  • 先把你学的计算机语言忘了,而后发挥你的想象力,把各类数据结构在你的大脑中具象化,一开始没必要追求过多的理论知识,也不要关心严密性,追求感性的认知;
  • 当可以形象地想象出某种数据结构的时候,动手用你学的C语言实现它。记住,不要追求完备的功能,只要写一个最简单的实现,一开始就追求完美不是一个好的学习过程;
  • 写完以后,回过头看那些理论上的东西,造成知识体系;
  • 最后,若是还有精力,从新写一个功能更完备一点儿的实现;

经过上面几步学习,基本上就掌握的比较好了,即使过了一段时间,也不会忘的一干二净;

回答四:

对于某个数据结构,几步:
一、理解该数据结构的基本概念(定义、实现)
二、尝试理解这个数据结构的意义(为何它会被发明)
三、用这种数据结构解决一些对应的例题(书本上的习题、Online Judge上的水题)
四、尝试用这个数据结构解决一些以往你用别的数据结构解决的问题,可否解决,为何。
五、再次尝试理解这个数据结构的意义
六、尝试改变这个数据结构以应对各类现实的问题(Online Judge的好题)
八、学好数学,别数都不会数。

注:以上回答取材出自知乎 :http://www.zhihu.com/question/19830721

相关文章
相关标签/搜索