数据结构开篇

贡献者:properties 类别:简体中文 时间:2017-01-23 10:39:33 收藏数:19 评分:0
返回上页 举报此文章
请选择举报理由:




收藏到我的文章 改错字
这篇文章里面不讲技术,抽空讲讲技术和通俗之间有一种奇特的关系,还有驱动力学习的东西。
看的是——《Java数据结构和算法》一书,作者RobertLafore。1)数据结构算法有什么用?当
你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,
也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。
校招会发现大公司考的就是这类的题目,刚开始不会考你java的线程,容器,多态什么的特性,
考的就是你的基础,你的这些基础扎实,学其他不是问题。正如作者所说,用于现实世界的存储,
我们使用的工具和建模。每种数据结构有自己的优点和缺点,想想如果Google的数据用的是数组的
存储,我们还能方便地查询到所需要的数据吗。而算法,在这么多的数据中如何做到最快的插入,
查找,删除,也是在追求更快。第一章也把数据库,面向对象,软件工程(原来整个软件工程项目的
生命周期包括分析、设计、验证编码、测试、生产和维护几个阶段)讲了个大概2)技术与通俗大学里
面那本严蔚敏的数据结构不厚,内容丰富,但是复杂问题的讲解方面篇幅这样就少了,比较难理解,
c也不是很擅长,但是基本的思路还是有的。简单的链表,数组,堆栈,队列,图,几个排序算法。
后面看到知乎涛吴的回答,当时很震撼,这里引用一下他的回答:如果说Java是自动档轿车,C就是
手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的
车子从A开到B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,
但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。如果你对这两件
事都不感兴趣也就罢了,数据结构懂得用就好。但若你此生在编程领域还有点更高的追求,数据结构
是绕不开的课题。Java替你做了太多事情,那么多动不动还支持范型的容器类,加上垃圾收集,会让
你觉得编程很容易。但你有没有想过,那些容器类是怎么来的,以及它存在的意义是什么?最粗浅的
,比如ArrayList这个类,你想过它的存在是多么大的福利吗——一个可以随机访问、自动增加容量的
数组,这种东西C是没有的,要自己实现。但是,具体怎么实现呢?如果你对这种问题感兴趣,那数据
结构是一定要看的。甚至,面向对象编程范式本身,就是个数据结构问题:怎么才能把数据和操作数据
的方法封装到一起,来造出class/prototype这种东西?
此外,很重要的一点是,数据结构也是通向各种
实用算法的基石,所以学习数据结构都是提升内力的事情。反正我有醍醐灌顶的感觉,好比说,我有在
编程上更厉害的追求,怎么能死在数据结构上的感觉。其实要将一门难懂的技术通俗地讲给不懂的人听,
需要很大的功力,包括之前我写的那篇《C与指针》刚开始的时候,那个C语言有什么用回答也是他写的,
我很佩服这样的人。所以当你能把一件东西清楚的讲解给别人听,类似前几篇文章提到的橡皮鸭调试法一样,
你搞懂了,摸清楚了。跟一个技术人士用技术的语言讲解,非专业人士通俗语言讲解。当然了,前提需要积
累。具体可以参见一下CSDN里面关于罗升阳的访谈——专访罗升阳:
老罗的Android之旅当时吓了我一跳,
之前以为和那个老罗同个级别的年龄,后面发现好年轻的小伙子,积累,慢慢积累。3)驱动力学习当你看到
你自己玩过的马里奥可以自己写出来的时候是不是心动了?顿时学习的驱动力是不是有了——我要做一个这
样的东西出来,然后开始学,直到自己动手完成。当时我在大学里就在推算,按照我这个学习速度,10年之
后那也可以牛逼哄哄啊。有些人为什么技术没有提升,几年之后还是那样,因为驱动力的东西,有段时间
我曾经停下来过,Java的差不多都学完了,干什么?因为从J2SE到EE的东西,大体的看完做过,
然后就有一段迷茫期了,驱动力也没有了。后面意识到自己太肤浅了,还有其他一些热门的框架没用,
最好的单例你写出来了吗,虚拟机你深入了吗,Java还有很多经典书籍没看呢?以学习新知识为驱动力
也是可以的,期间不停地学到新知识是很有成就感和很兴奋的东西——原来是这样xx。还有一种——目标驱动,
当时要做一个网络相关的东西——想到了爬虫,然后以做出这东西为目的,收集资料,看别人的代码,
这样的驱动力学习也是可以的。工作的时候,如果目标只放在工作的项目,每次的项目都有新的东西在里面,
那是可以学到东西的,一成不变的话,只能自己去发掘了。不然哪有那个学习到半夜的——专访雷果国:
从1.5K到18K一个程序员的5年成长之路。我要学Python,学了之后会发现,原来真的很牛逼,
可以尝试用Python写个爬虫,GoAgent之类的。这便是进步。扯了那么多,就是不希望自己只懂的用
Java做xx系统,只懂得用容器而永远不知道里面是怎样的。这些作为根基的懂了,其他也好学。
说回数据结构这个,为什么很多学生听课听得想睡,xx链表,双向链表,我排序都有N种,学生的想法
是这不知道有什么用,你讲链表给我,我把它实现一次,完事。但当你生活中的编程问题需要解决的时
候,你会发现到处都是数据结构的使用,像基金买入买出不是队列吗,先进先出;像简单的一个班级学生
的数据保存,用个数组不就可以解决了吗;再复杂的游戏路线问题,这不是图的问题吗;Java里面有Tre
e这字的,其实不也是用到树的原理吗?种种下来,你会发现,原来现实问题和语言里面的封装,都是和
这些有联系的,每当你学会一种,就会恍然大悟,这不就是当年西湖河畔的夏雨荷,就是这种感觉。而学
生在没有想过这些问题和没真正去使用这些语言的封装类之前,是不会考虑到上面所说的东西的。所以,
一大群学生趴在那里睡觉玩手机是正常的。后面自己意识到之后,马上去买了《Java数据结构和算法》,
补回之前没学和没弄懂的。不想学好基础的程序员不是好的程序员。
声明:以上文章均为用户自行添加,仅供打字交流使用,不代表本站观点,本站不承担任何法律责任,特此声明!如果有侵犯到您的权利,请及时联系我们删除。
文章热度:
文章难度:
文章质量:
说明:系统根据文章的热度、难度、质量自动认证,已认证的文章将参与打字排名!

本文打字排名TOP20