如果你关注计算机专业招聘试题,会发现越是大型公司,问的问题越基础,有的甚至问你什么是栈和队列,反而一些小公司会关心你做过什么系统。从关注点的不同可以看出,大公司更注重基础扎实和发展潜力,而小公司希望你立刻能够为其干活。可以这样比喻:小公司喜欢细而长的竹子,大公司更喜欢碗口粗的竹笋。

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

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

拨云见日,看清数据结构

当我们遇到一个实际问题时,首先需要解决两件事:

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

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

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

数据是一切能输入计算机中的信息的总和,结构是指数据之间的关系。数据结构就是将数据及其之间的关系有效地存储在计算机中并进行基本操作。算法是对特定问题求解步骤的一种描述,通俗讲就是解决问题的方法和策略。

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

为什么要学习数据结构

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

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

(1)学习有效存储数据的方法。很多学生在学习数据结构时,问我要不要把单链表插入、删除背下来?要不合上书就不会写了。我非常诧异,为什么要背?理工科技术知识很少需要记忆的,是用的,用的!学习知识不能只靠死记硬背,更重要的是学习处理问题的方法。如何有效地存储数据,不同的数据结构产生什么样的算法复杂性,有没有更好的存储方法提高算法的效率?

(2)处理具有复杂关系的数据。现实中很多具有复杂关系的数据无法通过简单的库函数调用实现。如同现在很多芯片高度集成,完全不需要知道芯片内部如何,直接使用就行了。但是,如果在现实中遇到一个复杂问题,现有的芯片根本无法解决,或者一个芯片只能完成其中一个功能,而我们需要的是完成该复杂问题的一个集成芯片,这时就需要运用所学的数据结构知识来高效处理具有复杂关系的数据。

(3)提高算法效率。很多问题的基础数据结构运行效率较低,需要借助高级数据结构或通过改进数据结构来提高算法效率。

通过学习数据结构,更加准确和深刻地理解不同数据结构之间的共性和联系,学会选择和改进数据结构,高效地设计并实现各种算法,这才是数据结构的精髓。

数据结构为什么那么难

网络上太多的同学吐槽被“虐”,如“滔滔江水连绵不绝”,数据结构太难了!真的很难吗?其实数据结构只是讲了3部分内容:线性结构、树和图。到底难在哪里呢?我通过调查,了解到数据结构难学大概有以下4个原因。

(1)无法接受它的描述方式。数据结构的描述大多是抽象的形式,我们习惯了使用自然语言表达,难以接受数据结构的抽象表达。不止一个学生问我,书上的“ElemType”到底是什么类型?运行时怎么经常提示错误。它的意思就是“元素类型”,只是这样来描述,你需要什么类型就写什么类型,例如int。这样的表达方式会让不少人感到崩溃。

(2)不知道它有什么用处。尽管很多人学习数据结构,但目的各不相同。有的人是应付考试,有的人是参加算法竞赛需要,而很多人不太清楚学习数据结构有什么用处,迷迷糊糊看书、做题、考试。

(3)体会不到其中的妙处。由于教材、教师等各种因素影响,很多学生没有体会到数据结构处理数据的妙处,经常为学不会而焦头烂额,学习重在体会其中的乐趣,有乐趣才有兴趣,兴趣是最好的驱动力。

(4)语言基础不好。我一直强调先看图解,理清思路,再上机。可还是有很多同学已经理解了思路后,因为缺少main函数,输入/输出格式不对,缺少括号等各种语言问题卡壳,而这一切都被戴上了“数据结构太难了”的大帽子。

数据结构学习秘籍

在讲学习秘籍之前,我们首先了解一下数据结构学习的3种境界。

(1)会数据结构的基本操作。学会各种数据结构的基本操作,即取值、查找、插入、删除等,是最基础的要求。先看图解,理解各种数据结构的定义,操作方法,然后看代码,尝试自己动手上机运行,逐渐掌握基本操作。在初学时,要想理解数据结构,一定要学会画图。通过画图形象表达,能更好地体会其中的数据结构关系。因此,初学阶段学习利器是:画图、理解、画图。

(2)会利用数据结构解决实际问题。在掌握了书中的基本操作之后,就可以尝试利用数据结构解决一些实际问题了。先学经典应用问题的解决方法,体会数据结构的使用方法,再做题,独立设计数据结构解决问题。要想熟练应用就必须做大量的题,在做题的过程中体会其中的方法。最好进行专项练习,比如线性表问题、二叉树问题、图问题。这一阶段的学习利器是:做题、反思、做题。

(3)熟练使用和改进数据结构,优化算法。这是最高境界了,也是学习数据结构的精髓所在,单独学习数据结构是无法达到这种境界的。数据结构与算法相辅相成,需要在学习算法的过程中慢慢修炼。在学习算法的同时,逐步熟练应用、改进数据结构,慢慢体会不同数据结构和算法策略的算法复杂性,最终学会利用数据结构改进和优化算法。这一阶段已经在数据结构之上,可以通过在ACM测试系统上刷各种算法题,体会数据结构在算法设计中的应用。这一阶段的学习利器是:刷题、总结、刷题。

它让数据结构变得简单

趣学数据结构 陈小玉 著

本书特色

本书具有五大特色。

(1)完美图解,通俗易懂。学习数据结构最好的办法就是画图、画图、画图。本书中的每一个基本操作和演示都有图解,有了图解,一切就都变得简单,迎刃而解。

(2)实例丰富,简单有趣。本书结合大量实例,讲述如何利用数据结构解决实际问题,使复杂难懂的问题变得简单有趣,给读者带来巨大的阅读乐趣,使读者在阅读中不知不觉地学会数据结构知识,体会数据结构的妙处。

(3)深入浅出,透析本质。本书采用简洁易懂的代码描述,抓住本质,通俗描述及注释使代码更加易懂。本书不仅对数据结构设计和操作描述全面细致,而且有复杂性分析过程。

(4)实战演练,循序渐进。本书在每一个数据结构讲解清楚后,进行实战演练,使读者在实战中体会数据结构的设计和操作,增强自信,从而提高了读者独立思考、自己动手实践的能力。丰富的练习题和思考题及时检验对所学知识的掌握情况,为读者从小问题出发,逐步解决大型复杂性问题奠定基础。

(5)网络资源,技术支持。本书为读者提供本书所有范例程序的源代码、练习题以及答案解析,这些源代码可以自由修改编译,以符合自己的需要。本书提供源代码执行、调试说明书,提供博客、QQ群技术支持,为读者答疑解惑。

本书内容

本书包括10章。

  • 第1章是基础知识,介绍数据结构基础和算法复杂性的计算方法。
  • 第2~5章是线性结构,讲解线性表、栈和队列、字符串、数组等的基本操作和应用。
  • 第6章是树形结构,讲解树、二叉树、线索二叉树、树和森林以及树的经典应用。
  • 第7章是图形结构,讲解图的存储、遍历以及图的经典应用。
  • 第8~9章是数据结构的基本应用,讲解查找、排序的方法和算法复杂性比较。
  • 第10章是高级数据结构及其应用,讲解优先队列、并查集、B-树、B+树、红黑树等。

本书的每一章中都有大量图解,并给出数据结构的基本操作,最后结合实例帮助读者巩固相关知识点,力求学以致用、举一反三。

本书预计8月16日左右上架。

【京东预售】 【当当预售】

数据结构真的很难学?相关推荐

  1. FPGA真的很难学吗?那可能是没弄明白这些道理

    问:零基础,想学FPGA,应该从哪入手?应该看什么教程?应该用什么学习板和开发板?看什么书等? 如果想速成,那就上网看视频吧,这样主要是面对应用的,一个小时内让你的板子运行起来.早期起来的快,活学活用 ...

  2. 【转】FPGA真的很难学详细解答

    如果想速成,那就上网看视频吧,这样主要是面对应用的,一个小时内让你的板子运行起来.早期起来的快,活学活用,就是后期没有系统理论支持,会有些吃力,特别是大项目,那完全是个悲剧.国内做的可以的,周立功算一 ...

  3. 计算机网络难学吗,计算机网络课程真的很难学吗-之续

    如果我们的教材是按照TCP/IP协议体系结构的层次来写,那么其中的章节一般应该包括:计算机网络概论.网络体系结构通述.物理层.链路层.共享介质访问控制(实质上讨论以太网).IP协议.传输层协议.应用层 ...

  4. STM32真的很难学吗?

    大家好,我是张巧龙,最近看知乎有一个问题,是关于嵌入式入门的,看到几个回答,还不错,分享给大家. 回答一: 作者:听心跳的声音 链接:https://www.zhihu.com/question/44 ...

  5. 女生学计算机真的难吗,女生想学计算机科学与技术,怕很难学懂,这门学科是不是特别难?女生学到底好不好?...

    女生想学计算机科学与技术,怕很难学懂,这门学科是不是特别难?女生学到底好不好?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下 ...

  6. 学淘宝美工设计真的很难吗?学历不高能做淘宝美工设计吗?

    本文由:"学设计上兔课网"原创,图片素材来自网络,仅供学习分享 学淘宝美工设计真的很难吗?学历不高能做淘宝美工设计吗?学历低.没有基础就学不好淘宝美工吗?低学历又想转行到淘宝美工的 ...

  7. 【转载】哈希表的原理,真的很难弄懂么?

    [转载]哈希表的原理,真的很难弄懂么? 刘小爱v 发布时间:05-0909:06科技达人 转载路径: https://baijiahao.baidu.com/s?id=1666172942887109 ...

  8. 二本学校考211计算机,普通二本学校的学生考211/985的研究生真的很难吗?

    原标题:普通二本学校的学生考211/985的研究生真的很难吗? 网友一: 我本科就是二本,念了一个交叉学科,交叉到什么地步呢,就是有些学校是把它放在教育学院,有些是设在物理学院,还有些是设在计算机学院 ...

  9. 转:Eric Lippert:阅读代码真的很难

    转自:http://blog.jobbole.com/438/ 相关文章 微软资深软件工程师:阅读代码真的很难(第2篇) 阅读优秀代码是提高开发人员修为的一种捷径 学会阅读源代码 如何阅读大型代码库? ...

最新文章

  1. Android系统--TouchEvent的处理流程
  2. 反弹木马——本质上就是一个开80端口的CS程序,伪造自己在浏览网页
  3. 安装libtiff包 Python3
  4. 绝对简单,就是将我自己的工作量估算乘2!!!
  5. 天涯煮酒又发现一篇好文,王阳明传,序就很漂亮,转一下
  6. 前端学习(553):node实现登录和注册第一部分代码
  7. linux dhcp服务软包,dpkg包管理器详解
  8. 深度优化LNMP之PHP
  9. IE6下top.location.href失效的问题
  10. Django日志模块logging的配置详解
  11. HDU 1242 特殊化带结构体BFS
  12. Python 各种库下载地址介绍
  13. centos7安装其他源以及安装软件
  14. TiDB错误码与故障排除
  15. 计算机管理照相机感叹号,电脑设备管理器摄像头驱动出现黄色感叹号是怎么回事儿 - 驱动管家...
  16. Hibernate事务与并发问题处理(乐观锁与悲观锁)【转】
  17. 淘宝省市区获取,淘宝国家省市区数据获取 2018-01-09更新
  18. 如何应对美国对开源项目的出口管制?这是Linux基金会的建议
  19. 目前三款国内最靠谱最良心的杀毒软件推荐 | 国内杀毒软件哪个好用?威航软件园诚意推荐这三个
  20. 【待更新】【Rockchip】瑞芯微/rockchip 开发环境搭建|编译|烧录 开发实例

热门文章

  1. JavaScript设计模式与开发实践(网课学习)
  2. 活动 报名就送 csdn定制马克杯
  3. IOS11 弹窗上文本框光标错位问题
  4. 利用LAPS武器化CVE-2019-0841
  5. elementUI合并单元格
  6. 伪类和伪元素的区别及使用场景
  7. Twitter网站架构介绍(转)
  8. 与一汽密谈 南汽罗孚点将起航
  9. Solidity之事件
  10. ubuntu 安装五笔拼音输入法