数据结构毫无疑问的是在编程上非常重要的一部分内容,在我的学习过程中,我经历了迷茫,入门,熟悉等阶段,我以个人经历为例子,讲解一下我对数据结构从惧怕到熟悉的过程。
我是一个学习编程主动性很强的人,大二上学期,我知道了数据结构这门课程对于编程的重要性,加上自己自学完了C语言,就开始在网络上查找资料学习数据结构了,一开始光靠自己看,进度真的很慢很慢,一开始很难理解他为什么是一段一段的代码,后来经过查阅资料和看视频才慢慢入了门,但也只是对着书上的代码知道他要干什么,自己去编写是完全做不到的。
阶段一
第一阶段自学的时候,我对于数据结构的感觉就是难,现在回头看,发现其实当初的难,只是自己的惧怕和懈怠,最大的原因是自己的不重视,我当时只在英语课上看一看数据结构,没办法做到静心去思考问题,加之自己认为这是我自己给自己的任务,不完成也没有关系,所以经常遇到难得就不愿意花费时间去思考,但是这段经历也给了我警示,现在的我对于自己学习的东西也会上一百分的心去学习,不会在让自己一知半解了。
阶段二
后来报了一个关于教学的培训班,不得不说的是学习上有人讲和没有人讲,效率差别真的很大,而且练习和不练习的差别也很大,自己学习的时候,看到那些代码就不想动手去敲,加上还有课业的负担,后来我一整个寒假待在了补习的地方,也没有课业的负担,就感觉当初深奥难懂的数据结构的代码,概念等等这些东西原来都是这么的简单,加上自己在课下不断地编写数据结构相关的代码,很快的就把这些知识都串联熟悉了起来,能够靠自己写出相应的数据结构了。这一段经历给我最大的感触就是上手练习,真的是很重要很重要的一个环节,哪怕你开始不是很懂,基础不是很牢固,那你可以对着书一行一行的抄代码,在抄代码的过程中,你会熟悉数据结构的框架,毕竟比如链表这些数据结构他们都是有相应固定的结构体结点和操作的,甚至当你完全熟悉了一个的时候,对于别的的理解你也会加快很多,所以可以试着先去弄透链表的所有结构和相应的函数集,然后在学习别的数据结构的时候你就可以把之前理解链表的模式套进去,这样学习会加快你理解的速度,不要对链表都还一知半解的时候就着急的去看栈这些东西,学习要一步一步踏实的走。
如果说通过自学的阶段我对数据结构有了个大致的概念,那么第二阶段的训练对我而言是对数据结构真正的入门,通过大量的练习和编程,我很快速的熟练了所有数据结构的实现,先不说是否深入理解了什么东西,但是最起码我可以靠着自己去实现自己的数据结构了,而且还可以在原先的基础上根据自己的需求去增改一些东西,面对许多数据结构的题目也可以得心应手的解决,算是真真正正的能用数据结构了,对于学习方面的建议真的就是多练,一定要多练,不管理解不理解,先敲了再说,不要想着偷懒,你敲得代码也不会白费你的努力。
阶段三
然后,我觉得对数据结构最后的阶段是理解,虽然我报了培训班,但是那也是加强型的走马观花的练习,深入的概念理解学习还是要靠学校的学习和自己的联系,现在的我正在努力的攻克这一难点,以前的我对于数据结构,如果题目让我去实现一个东西,只要给我时间,那我有自信一定能够做出来,题目要求我用链表,我就用链表,题目要求我用广义表,我就用广义表,我觉得我能够实现它,那就足够了,却从不知道去想一想他为什么让我用链表,我用数组行不行?我之前对于学习有一个不好的心态就是做题为准,后来上学校的数据结构课,这已经算是我第三遍的学习了,我开始不是很在意,后来我发现虽然我已经算是学过两遍的人了,但是老师讲概念这些的时候有的我还不是很熟,也就是说这个东西的特性,比如链表,我可以靠之前的学习说出他的优点和缺点,但是他的优点和缺点决定了他那些应用的范畴,我倒是很少考虑,我觉得上课完了我最大的经历是我思想上的改观,以前的我会以直接实现功能为主的去使用数据结构,现在的我会多去想一想,他为什么要用这个数据结构?我换一个行不行?换一个以后他的那些方面会得到优化,又会丧失那些自己的特性?这样做是否值得?数据结构是没有标准答案的,就和老师举得例子一样,一个迷宫问题,走过的路用双向链表可以存储,用栈可以存储,那么哪一个的存储效率更高呢?如果非让你用队列这些结构去存储你又该怎么实现能够使解题的思路最为高效清晰呢?这些都是问题,而且都是我们实际工作后也肯定会问道的问题,这就需要我们对这些数据结构的特性去做更深一步的理解了。
最后对于老师教学方面的个人感悟,我觉得老师在学生完成普通课业的情况下给予相应的额外任务也是能够帮助学生去更加深入理解数据结构的一个有很大益处的举动,因为学生的个人进度是不一样的,有的已经完成了自己的工作,那么还有主动性去学习一些更新的更难得东西的时候,这时候真的需要有人给他们指一个方向,还有就是学生对于自己哪方面不足也是很难去发现了,就比如我对于静态链表的实现在之前学习的时候就不是很上心,就感觉已经有链表了为什么还要用静态链表?后来老师跟我说让我用静态链表做一个约瑟夫环,我才发现,我好像对静态链表掌握的不熟悉,后来是通过看书才实现了相应的工作,通过这样的工作我就发现了自己难以发现的薄弱的环节,也加深了自己对于不同数据结构的理解,我个人感觉自己是获益匪浅的。