学编程为什么要学数据结构?

招聘搞笑事

如果你关注招聘试题,越是大的公司,问的问题越基础,有的甚至问你什么是栈和队列,反而一些小公司会关心你做过什么系统,关注点不同,大公司更注重基础扎实,发展潜力,而小公司希望你立刻、马上为他干活,通常是没什么技术含量的活。小公司喜欢细而长的竹子,大公司更喜欢碗口粗的竹笋。

我曾经推荐一个学生到某知名公司,没多久,学生给我说了应聘的事情:“我介绍我开发了企业管理系统、在线商城系统等等,没想到他问我使用了什么数据结构和算法,我懂很多技术,那么多功能我都实现了,他不问,却问我使用了什么数据结构和算法,你说搞笑不?数据结构、算法我早就忘了,我会开发软件还不行吗?”人力资源总监也反馈过来意见:“很搞笑,这个学生做了不少系统,却说根本没用到数据结构和算法。”

既然双方都觉得这是一个件搞笑事,我们就摊开来看,数据结构到底是什么东西。

拨云见日,看清数据结构

遇到一个实际问题,需要解决两个事情:

(1) 如何将数据存储在计算机中;

(2) 用什么方法策略解决问题。

前者是数据结构,后者是算法。只有数据结构没有算法,相当于只把数据存储到计算机中而没有有效的方法去处理,就像一幢只有框架的烂尾楼;若只有算法,没有数据结构,就像沙漠里的海市蜃楼,只不过是空中楼阁罢了。

数据是一切能输入到计算机的信息总和,结构是指数据之间的关系,数据结构就是将数据及其之间的关系有效地存储在计算机中。算法是指对特定问题求解步骤的一种描述,说白了就是解决问题的方法策略。

遇到一个实际问题,充分利用所学的数据结构,将数据及其之间的关系有效地存储在计算机中,然后选择合适的算法策略,并用程序高效实现。,这就是N.Wirth教授所说的:数据结构+算法=程序

为什么要学习数据结构?

计算机专业本科生都开设数据结构课程,它是计算机学科知识结构的核心和技术体系的基石。研究生考试也是必考科目,随着科学技术的飞速发展,数据结构的基础性地位不仅没有动摇,反而由于近年来算法工程师的高薪火爆,使得数据结构的重视程序空前高涨。很多人觉得基本的数据结构及操作已经在高级语言中封装,如C++、JAVA,栈、队列、排序、优先队列等等,都可以直接调用库函数,学会怎么调用就好了,干嘛要重复造轮子? 那么到底有没有必要好好学习数据结构?

先看学习数据结构有什么用处:

(1) 学习数据有效存储的方法

很多学生在学习数据结构时,问我要不要把单链表插入删除背下来?要不合上书就不会写了。我非常诧异,为什么要背?理工科技术知识很少需要记忆的,是用的,用的!学习知识不是死记硬背,更重要的是学习处理问题的方法。同一个问题,如何有效地存储数据,不同的数据结构产生什么样的算法复杂性,有没有更好的存储方法提高算法的效率?通过学习数据结构,更加准确和深刻地理解不同数据结构之间的共性和联系,学会选择和改进数据结构,高效地设计并实现各种算法,这才是数据结构的精髓。

(2) 处理具有复杂关系的数据

现实中很多具有复杂关系的数据,无法通过简单的库函数调用实现。如同现在很多芯片高度集成,完全不需要芯片内部如何,直接使用就行了。但是,如果在现实中遇到一个复杂问题,一个芯片只能完成其中一个功能,难道要连接十几块芯片来解决这一个问题?这显然是不合适的,我们需要的是完成该复杂问题的一个芯片,因此需要运用所学的数据结构知识,高效处理具有复杂关系的数据。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

C加加的学习方法!

学习C++重在理解其各种语言设施所代表的语义,以及C++所能表示的语义所代表的设计思想。首先从宏观上入手,你需要明白的是C++是程序设计语言的本质。在此我把C+...

19960
来自专栏程序员互动联盟

要想精通C语言,必须先学习汇编吗?

编程语言里面很少有人直接说出精通两个字,特别是一些入行好多年的程序员,从语法来讲C语言相对来讲入门还是比较容易,在高级语言还没有完全展开的年代,C语言算入门比较...

14730
来自专栏企鹅号快讯

编程为什么入门首选C语言呢

为什么入门首选C语言呢 C语言除了能让我们了编程的大门,也让我们了解到程序的运行原理,和计算机底层是如何交互的,这些底层的知识决定了你的高度,也决定了你的未来的...

48460
来自专栏程序员互动联盟

【答疑释惑第十四讲】如何学习数据结构?

疑惑一 为什么学习编程前,先要掌握计算机组成原理? 很多的学习编程的小伙伴,特别是上来就学习java的小伙伴,很多对底层语言的实现存在一种莫名的畏惧感,老是觉得...

31360
来自专栏程序人生 阅读快乐

《类型和程序设计语言》

类型理论在程序设计语言的发展中起着举足轻重的作用,成熟的类型系统可以帮助完善程序设计本身,帮助运行系统检查程序中的语义错误。

14510
来自专栏前端真相

抽象和离散

23760
来自专栏java工会

关于逻辑、数学和编程的深层次思考

众所周知,编程离不开数学和逻辑。诚然,很多程序员数学能力并不强,也没有系统的逻辑能力。但是,他们在无意识中,日常工作中,有意无意的就在使用逻辑和数学,并将它们运...

10620
来自专栏程序员互动联盟

如何才能精通C语言?

其实说到精通两个两个字,其实作为一个做了多年的老程序员,一般不敢提及这两字,要精通一门语言相当的难,所以在简历上一般看到精通某种语言的描述,总会找点犄角旮旯的问...

65070
来自专栏企鹅号快讯

为什么那么多人说C+难学?怎么学

对于正在学习C/C++的同学来说,C语言可能不难,但是当自学C++的时候,总会出现各种问题,就像是一个恶性循环不懂所以不想看,关键是没有·一个由浅到深的过程,刚...

20080
来自专栏程序员的知识天地

一个开发十年的程序员论:学习Python最正确的步骤(0基础必备)

首先,学习Python编程技术,自学或者参加培训学习都适用,每个人都有自己的学习方式和方法。

11320

扫码关注云+社区

领取腾讯云代金券