为什么要学数据结构

        《数据结构》是计算机专业的一门必修课, 可是很多学生学完以后,觉得用处不大, 还不如学个C,Java来的直接一点。

        然而,个人认为存在即合理。数据结构毫无疑问是最重要的编程基础之一。

        学了顺序表和链表以后才会发现,在查询操作更多的程序中,你应该用顺序表;而修改操作更多的程序中,你要使用链表;而单向链表不方便怎么办,每次都从头到尾好麻烦啊,怎么办?你这时就会想到双向链表or循环链表。

        学了栈之后,你就知道,很多涉及后入先出的问题,例如函数递归就是个栈模型、Android的屏幕跳转就用到栈,很多类似的东西,你就会第一时间想到:我会用这东西来去写算法实现这个功能。

        学了队列之后,你就知道,对于先入先出要排队的问题,你就要用到队列,例如多个网络下载任务,我该怎么去调度它们去获得网络资源呢?再例如操作系统的进程(or线程)调度,我该怎么去分配资源(像CPU)给多个任务呢?肯定不能全部一起拥有的,资源只有一个,那就要排队!那么怎么排队呢?用普通的队列?但是对于那些优先级高的线程怎么办?那也太共产主义了吧,这时,你就会想到了优先队列,优先队列怎么实现?自己百度去吧  

        虽然大多数书上的算法在函数库里面都已经定义好,但是我认为学习数据结构,并不仅仅是学习其中现成的那些队列,堆栈,二叉树,图等经典结构, 也不仅仅是学习其中的那些快速排序、冒泡排序等算法。更重要的是你要学习一种思想:如何把现实问题转化为计算机语言的表示。

        计算机其实一种很笨,很机械的机器,只会按照预定的指令一步步执行, 而计算机语言的特点就是精确、无二意, 它的本质语言是二进制的, 即使是C,Java等高级一点的语言也只不过是包装而已, 它的表达能力并没有本质的提升, 仍然停留在很低的层次。

        而我们用的自然语言则是典型的模糊的,不精确的, 程序员面临的一个重要问题, 或者是我们的主要工作就是怎么把自然语言描述的问题转化为计算机语言的表示。

        到底该怎么转化, 《数据结构》已经给出了指引: 设计出数据结构, 在施加以算法就行了, 当然现实问题会更复杂, 需要框架,类库,模式等支撑。

        这是一种非常重要的逻辑思维能力的锻炼, 也是程序员入门的条件。





猜你喜欢

转载自blog.csdn.net/qq_39728274/article/details/79990604