数据结构的本质是一种思维,它的目标是将现实世界中各种各样的数据放入到内存中,在内存中操作这些数据,并尽可能优化这些存储方案和操作方法。
编程语言是将数据结构这种思维实现出来的一种工具。
而学习数据结构最重要的就是边学边做,只学习书上的思维方法不用编程语言写出来的话,效率将非常低下,就好比学习数据只看例题不做题,其实往往收获甚微。既然要边学习边实践,那么在学习数据结构之前,掌握一些基础的编程知识是很有必要的。
这里把个人的一些经验分享给题主。
零、快速学习基础C语言
前面说道,在学习数据结构之前,应该掌握一定的编程知识,但是不必精通某个语言,知道基本语法即可。题主可以去中国大学MOOC,或者网易云课堂上,找一个自己喜欢的课程,跟着视频把基础的语言过一遍,这里推荐浙江大学翁凯老师的C语言课程。链接:https://mooc.study.163.com/course/1000002011?tid=2001530003#/info
一、记住算法思想(是什么)
这一部分的目标是,你能给人说明白,什么是”堆栈“,什么是”平衡二叉树“等。题主应当形成长久记忆,存储到你的”硬盘“里,而不仅仅在学习的时候过了一遍你的”内存“。
第一步,记住数据结构最直观的东西。这种直观的记忆会在不知不觉中就完成,但为了更好的记住,还需去刻意记忆和偶尔的复习。
第二步,记忆该数据结构的定义与性质与特点等。例如,学习哈夫曼树的时候。哈夫曼树的定义:WPL(带权路径长度)最小的二叉树;哈夫曼树的特点:(1)没有度为1的结点(2)n个叶子结点的哈夫曼树共有2n-1个结点(3)哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树。关于”数据结构“,需要记忆的内容也需要自己在其中慢慢领悟。
二、进行大量相关编程练习,用编程语言去实现某一数据结构上的算法(怎么办)
必须承认,理解一个算法很容易,很容易在纸上去模拟一个算法的实现过程。但,具体实现,则是另一回事。一定得先自己思考,然后再去看书中给的编程语言实现。在偶看来,这一过程已经不属于“数据结构与算法”的内容了。而是你综合素质的体现,如何真正理解问题和用编程技巧实现,很考验自己。
三、”记住“特定情景下,利用某一特定的数据结构,去解决问题(为什么+怎么办)
每介绍一种数据结构,浙大数据结构与算法的MOOC课程都会有一个实际问题来作为“引子”,回答了“这种数据结构为什么会出现”。有的是为了实现特定的操作,有的是为了时间和空间上(大部分考虑的是时间复杂性)效率的更高。这些东西,大家也须理解记忆。
最终,希望题主能自己根据自己的理解,针对某个问题,熟练的给出下图这样的解决方案,偶认为就算是入门了。