学习数据结构的意义

可能有很多同学在没开始学甚至学完后都不清楚学数据结构的意义。
本人做题渣,不太会刷题,所以最开始对这种我还不明白学它的意义的科目(不要说是为了考试!)保持一种抵触的情绪,随着接触的东西越来越多,发表一点拙见吧,也为同样迷茫的小伙伴做个开路先锋。

我先矫情一句——不论通天的思路多么地优雅和艺术,但到作为成果时他们总是把能一步步走上来的梯子(意图和思路)撤走,取而代之的是难以攀爬的峭壁(一步步机器执行过程)并留下那峭壁之上的空中阁楼(结论)。

我不想谈那些不具体的“掌握好数据结构,也就掌握好了数据处理的算法;学习数据结构很重要”那种套话,因为那些话是从没做过什么东西的人都能说的出来的!培训机构、假大佬等不讲什么具体用处让人云里雾里又觉得神乎其神,本人一直反对的也是这些。学习从来都是在解决问题的过程中发生的,没有相应问题对象的学习如同“没有金蛇剑就学习金蛇剑法”一般反人类。

1.数据结构是计算机方便实现的方式

这么说大家有些明白了吧,既然连和计算机沟通的”语言“都学了,那么”常见的短语和习惯用法“(不知道这个比喻是否恰当)也应该学了。

底层汇编有栈寄存器,学的数据结构里有栈指针
c++里有STL库,方便的vector模板类。

2.算法需要相应的数据结构做基础
我们编程不可能”只用来做算术题“(找到一句话:当今处理非数值计算性问题占用了85%以上的机器时间)
例如在c语言里我们有现有的char、int数组等数据类型,构建数据结构时我们可以偷懒用数组来代替串,但是树、图等数据结构我们就不得不用关键词struct结构体来构建,同时构建的方法我们因为要学习例如十字链表法等。

KMP算法,“串”的数据结构,减少匹配次数来解决优化匹配速度问题
Kruskal算法,“图”的数据结构,生成最小生成树

3.用编程语言(或框架),构建一种数据结构,完成相应的算法,解决相应问题。
这就是现阶段我能总结出最简短却最贴切的总结了。
不要把算法吹的神乎其神,就是能解决问题的程序罢了,只不过越高端快速的算法越在思维上显得不直接,比如快速排序就是融合了二分法的递归。

4.数据结构,基础算法。问题意图与分类
记住方法特征来命名永远比记住方法名字建立的联系更加牢靠。(比如:Kruskal算法–避圈法)

常用的数据结构有:数组、链表、堆栈、树、图
常用的排序算法有:希尔排序、冒泡排序、快速排序、选择排序
常用的查找算法有:顺序查找、折半查找、分块查找等。

5.分清“道”与“器”
形而上者谓之道,形而下者谓之器
“道”是方法,对比具体的代码,伪代码就是道、数据结构的描述就是道。
“器”是具体的,我过去就很喜欢可运行代码,但是要配置相应环境。
你会冒泡排序,让你用伪代码、流程图、c++、java都应该能写出冒泡排序;
你会算数,让你用汉字、英文、阿拉伯数字都应该能写出演算过程并得到结果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章