数据结构为什么那么难?


2017年8月,基于让更多人轻松学习算法的初衷,我写了第一本书《趣学算法》,该书在出版后得到了读者的广泛赞誉,并在一年内重印了10次并输出。传统版本的版权。

一位读者告诉我,读这本书的内容是“不能停止”,为什么不呢?写和写“不能停止”,这是作者和读者之间的巨大共鸣!同时作为交换学习算法,越来越多的学生反映数据结构难以理解,问我是否可以写一本书《趣学数据结构》。说实话,写一本书是一项非常繁重的工作。每个句子和每张图片都需要仔细研究。虽然我犹豫不决,但有一件事增强了我写这本书的信心。

如果你关注计算机专业招聘问题,你会发现越大的公司,问的基本问题就越多,有的甚至会问你堆栈和队列是什么,但是一些小公司会关心你做了什么系统。从重点的差异可以看出,大公司更加关注坚实的基础和发展潜力,小公司希望你能立即为他们工作。它可以比作这样:小公司,如薄和长竹,大公司更喜欢厚碗竹笋。

我曾经向一家知名公司推荐过一名学生。不久之后,学生告诉我应用程序:“我介绍了我的企业管理系统,在线商店系统等的开发。我没想到他会问我使用了什么数据结构和算法。我知道很多技术,所以我已经实现了各种功能。他没有问,但问我使用了什么数据结构和算法。你好笑吗?我早就忘记了数据结构和算法。我还会开发软件吗?“人力资源导演还给出了反馈:“这很有趣,这个学生做了很多系统,但是说根本没有使用任何数据结构和算法。”

既然双方都觉得这很有趣,那么我们就会打开并看看数据结构是什么。

当我们遇到真正的问题时,我们首先需要解决两件事:

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

(2)使用哪些方法和策略来解决问题。

前者是数据结构,后者是算法。只有数据结构没有算法,这相当于只在计算机中存储数据,但没有有效的方法来处理它,就像无框架腐烂的建筑物;如果只有一个算法,就没有数据结构,就像在沙漠中一样。海市蜃楼只是一座空中楼阁。

数据是可以输入计算机的所有信息的总和,而结构是指数据之间的关系。数据结构是将数据及其关系有效地存储在计算机中并执行基本操作。算法是解决特定问题的步骤的描述,这是解决问题的常用方法和策略。

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

高校计算机科学专业为本科生开设了数据结构课程。它是计算机科学知识结构的核心,也是技术系统的基石。它也是研究生考试的必修科目。随着科学技术的飞速发展,数据结构的基本状态并未动摇。相反,由于算法工程师近年来的高工资状况,它在业内受到了前所未有的关注。许多人认为基本数据结构和操作已经封装在高级语言(例如C ++,Java)中。堆栈,队列,排序,优先级队列等可以直接调用库函数。学习如何称呼它们是很好的。你为什么要重复它们?制作轮子?“那么有必要很好地学习数据结构吗?

首先看一下学习数据结构的有用性。

(1)学习有效存储数据的方法。当许多学生正在学习数据结构时,问我是否要插入或删除单个链表。如果你没有关闭这本书,你就不会写它。我很惊讶,你为什么要回来?很少需要记住科学和工程技术知识,它被使用,使用!学习知识不仅可以依靠死记硬背,更重要的是学习如何处理问题。如何有效地存储数据,不同的数据结构产生什么样的算法复杂度,是否有更好的存储方法来提高算法的效率?

(2)处理具有复杂关系的数据。实际上,许多具有复杂关系的数据无法通过简单的库函数调用来实现。由于现在许多芯片都是高度集成的,因此无需了解芯片内部的内容,只需直接使用即可。但是,如果你遇到现实中的复杂问题,现有芯片根本无法解决,或者芯片只能完成其中一项功能,而我们需要一个集成芯片来完成复杂问题,那么我们需要使用Learn有效处理复杂关系数据的数据结构知识。

(3)提高算法效率。许多问题的基础数据结构运行效率较低,需要高级数据结构或改进的数据结构以提高算法效率。

通过学习数据结构,了解不同数据结构之间的通用性和连接,学习选择和改进数据结构,以及有效地设计和实现各种算法,更加准确和深刻。这是数据结构的本质。

互联网上的学生太多被滥用,比如“河流不断流淌”,数据结构太难了!真难吗?实际上,数据结构只涉及三个部分:线性结构,树和图。哪里难?通过调查,我了解到学习数据结构有四个原因。

(1)无法接受它的描述方式。数据结构的描述主要是抽象形式。我们习惯用自然语言表达,很难接受数据结构的抽象表达。不止一个学生问我书中有哪种“ElemType”?运行期间错误发生的频率是多少?它的意思是“元素类型”,只是为了描述你需要编写什么类型,比如int。这种表达方式会让很多人感到伤心。

(2)不知道它有什么用处。虽然很多人了解数据结构,但目的却不同。有些人正在处理考试,有些人参与算法竞赛,很多人不太清楚学习数据结构的有用性,愚蠢的阅读,做问题,考试。

(3)体会不到其中的妙处。由于教材和教师等各种因素,许多学生没有经历过数据结构处理数据的美感。他们经常不知道如何学习。他们有兴趣学习这种乐趣,他们对兴趣感兴趣。兴趣是最好的推动力。

(4)语言基础不好。我一直强调先看图,清楚思考方式,然后再去机器。然而,许多学生已经理解了这个想法。由于缺乏主要功能,输入/输出格式错误,并且缺少括号和其他语言问题,所有这些都被置于“数据结构太难”的大帽子上。

在我们谈论作弊之前,让我们先了解一下数据结构学习的三个领域。

(1)会数据结构的基本操作。学习各种数据结构的基本操作,即值,查找,插入,删除等,是最基本的要求。首先看图,了解各种数据结构的定义,操作方法,然后看代码,尝试自己动手,逐步掌握基本操作。一开始,要了解数据结构,必须学会绘制。通过图像的表达,可以更好地理解数据结构关系。因此,初学阶段的学习工具包括:绘画,理解和绘画。

(2)会利用数据结构解决实际问题。掌握了本书中的基本操作后,您可以尝试解决数据结构的一些实际问题。首先要学习经典应用程序问题的解决方案,体验数据结构的使用,然后再做问题,独立设计数据结构来解决问题。要精通应用程序,您必须做很多问题,并且您将了解执行问题的过程中的方法。最好执行特殊练习,例如线性表问题,二叉树问题和图形问题。在这个阶段学习的工具是:做问题,反思和做问题。

(3)熟练使用和改进数据结构,优化算法。这是最高级别,也是学习数据结构的本质。通过单独学习数据结构是不可能实现这种状态的。数据结构和算法相互补充,需要在学习算法的过程中慢慢培养。在学习算法的同时,逐步巧妙地应用和改进数据结构,慢慢实现不同数据结构和算法策略的算法复杂度,最后学会运用数据结构改进和优化算法。这个阶段已经在数据结构上了。通过在ACM测试系统上刷各种算法问题,可以了解数据结构在算法设计中的应用。这个阶段的学习工具包括:刷问题,总结和刷问题。

本书具有五大特色。

(1)完美图解,通俗易懂。学习数据结构的最佳方法是绘制,绘制和绘制。本书中的每个基本操作和演示都有说明,通过插图,一切都变得简单易行。

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

(3)深入浅出,透析本质。本书使用简单易懂的代码描述来捕捉本质,流行的描述和注释使代码更容易理解。本书不仅全面地描述了数据结构的设计和操作,还具有复杂性分析过程。

(4)实战演练,循序渐进。在清楚地解释了每个数据结构后,本书进行了实践练习,使读者能够理解数据结构的设计和操作,增强实战中的自信心,从而提高读者自主思考和自我实践的能力。丰富的实践问题和思考问题及时测试掌握所获知识,为读者从小问题入手,逐步解决大规模复杂问题奠定基础。

(5)网络资源,技术支持。本书为读者提供了本书中所有示例程序的源代码,练习和答案分析。这些源代码可以自由修改,以满足您的需求。本书提供源代码执行和调试手册,提供博客和QQ群技术支持,并为读者回答问题。

本书包括10章。

第1章是基础知识,介绍了算法的数据结构基础和计算复杂性。

第2-5章是线性结构,解释了线性表,堆栈和队列,字符串,数组等的基本操作和应用。

第6章是一个树结构,它解释了树,二叉树,线索二叉树,树木和森林以及树木的经典应用。

第7章是一个图解结构,解释了图形的存储,遍历和经典应用。

第8-9章是数据结构的基本应用,解释了查找和排序算法以及比较算法复杂性的方法。

第10章是一个高级数据结构及其应用,解释优先级队列,枚举,B树,B +树,红黑树等。

本书的每一章都有很多插图,并给出了数据结构的基本操作。最后,这些例子用于帮助读者巩固相关知识点,并努力应用他们所学到的知识。

有趣的数据结构电脑和互联网[报价价格评论品牌] - 京东热卖京东购书

作者:陈晓宇

推荐理由:

完美的插图+丰富的例子,简化了复杂的问题。原理分析+实践练习,真正学会了用。支持代码+在线问答以保护研究。

本书是用C ++语言编写的。介绍了有趣故事的算法复杂度计算和数据结构基本内容,包括线性结构,树形结构和图形结构,包括链表,堆栈和队列,树和图形应用。本书还介绍了数据结构的基本应用(包括各种查找,排序等)和高级应用程序(包括优先级队列,集合,B树,B +树和红黑树)。抽象数据模型通过大量图表简单易行,语言表达易于理解,有趣的例子有助于读者轻松掌握数据结构。

- END -

分享时刻

您认为数据结构难吗?为什么?

截至8月15日,消息+转发朋友圈

提取2位读者