本节开始将带领你们系统地学习数据结构,做为一门计算机专业大二学生的必修课程,该课程面对的目标人群为初步具有基本编程能力和编程思想的程序员(大一接触了 C 语言或者 C++)。经过系统地学习数据结构,能够提升程序员分析问题和解决问题的能力。程序员
首先,先来揭开数据结构的神秘面纱,看看什么是数据结构。算法
数据结构,能够将之分为“数据”和“结构”两个方面去理解。
数据,很好理解。都说人离不开空气,感受剥夺实验告诉咱们,人也离不开信息,而信息实际上就是对数据进行加工后获得的产物。信息的形式多样化,因此数据的形态也多种多样:文字、数字、字母、符号、图形图像、音频视频等均可以是数据。
编程
感受剥夺实验,就是剥夺人的全部接受信息的权利,包括触觉、听觉、感受等,这样的剥夺,任何人都是受不了的,详情能够去网上搜索。数组
2017 年的双 11,全球的“剁手族”为天猫贡献了 1682 亿,其中“剁手族”分布最多的城市为广东,等等这些都是经过天猫后台对一笔笔交易数据进行统计得出的结论。
结构,能够理解为各部分之间的关系。对于一篇文章的文章结构来讲,有总分式,有并列式等,而判断一篇文件结构的过程实际上就是搞清楚文章中各个天然段落之间的关系。
数据结构,其实是一门研究数据以及数据之间存在的关系的一门课程。经过理清数据及其之间存在的关系,就能够将数据有效存储到计算机中,让计算机来处理数据。
例如,在编写程序实现计算 7-2=? 的问题中,首先搞清楚的是:数据结构
所有搞清楚了以后,就能够编写程序解决此问题:定义两个整形变量,一个表示被减数,一个表示减数(肯定之间的关系),将 7 和 2 赋给各自相应的变量(将数据存储到计算机中),最终输出相减的结果。
数据结构的体现不止于此,如图 1 所示,为一个家庭现有成员的树形图,现须要让计算机解决:找到孙子张磊的爷爷是谁?数据结构和算法
经过看这张家谱树形图,能够一眼看出,张磊的爷爷是张亮。可是若是把这个问题交给计算机来实现,就须要帮助计算机理清数据之间的关系。编程语言
数据之间的关系(即数据结构)又可细分为:逻辑关系(逻辑结构)和物理关系(物理结构)。逻辑关系就是例如张晶的父亲是张平、张群是张平的兄弟等等这样的关系,是人为赋予给数据的。
学习
数据之间的逻辑关系分为三种:“一对一”、“一对多”、“多对多”。图 1 中,每一个孩子对应着惟一的父亲,这是“一对一”的关系;拿张平来讲,他有两个孩子,为“一对多”的关系;在共享单车中,每一个用户均可以选择多辆不一样的单车;而每辆单车会被多我的使用,此为“多对多”的关系。网站
可是因为最终解决问题的主体是计算机,解决问题时须要将数据所有存储到计算机中,然后计算机去处理。数据在计算机中的实际存储表现出的是数据之间的物理结构,例如张晶距离张磊在实际的物理存储中有 5 比特的距离。
学习数据结构的做用就是在理清数据的逻辑关系的前提下,设计出合理的物理存储结构,使用这种结构,既能有效的存储数据,又能表示数据之间的关系。当计算机明白了这两个因素,问题天然而然就解决了。spa
数据结构和算法二者为互利双赢的关系,二者并不冲突。使用计算机编程解决某个具体问题时,正确的作法是:
数据结构解决的是第一个问题,算法解决的的第二个问题。光有数据结构没有算法,至关于只把数据存储到计算机中而没有有效的方法去处理,没有任何意义;而若光有算法,没有数据结构,就至关于一个军师有锦囊妙计,可是没有士兵。
本教程参照严蔚敏教授的《数据结构》一书,课程内容同该书同步,根据数据之间不一样的逻辑关系,分为如下章节:
以上在介绍的同时,还会涉及到具体问题的解决,例如查找某个数据等。除以上内容外,也包含了有关字符串、数组和广义表的相关内容。
除以上内容外,本教程对于各个知识点,还会配有专门的项目进行练习,同时还会不断地更新内容,给你们搜集介绍一些实用的算法。
对于面临的一些复杂的问题,其复杂性每每不是解决该问题的算法,更多的是思考如何存储具备复杂关系的数据。对于解决此类问题,数据结构无疑是一把利器。
本教程依照于严蔚敏的《数据结构》一书,致力于打造一套适用与初学者,最浅显易懂的数据结构教程。
因为《数据结构》一书在对知识点的讲解上,跳跃性较强,对读者的编程思惟要求较高。针对这个状况,本教程在该书的基础上对其知识点进行了更浅显易懂的讲解,在讲解过程当中配有大量的样例和图示。
更重要的是,本教程对该书中全部的伪代码进行了基于 C 语言的完整实现,对实现过程进行了大量的铺垫,并附带了大量易于理解的注释和图示。
注意:本书中全部涉及到的代码都是基于 C 语言实现的,且遵循较新的 C99 标准,读者在尝试运行网站中的代码时请尽可能使用较新版本的编译器。
在武侠小说中,高手每每注重内功的修养,而招式则为其次,有了深厚的内力,即便不会招式,也能见招拆招;若是一味地崇拜花拳绣腿,没有内功,只是花架子,没什么卵用。
程序猿的路也是如此,要内外兼修。不少人认为大学所学的内容没用,其实否则,大学的学习就是在不断地提高本身的内功修为;毕业步入社会后,在深厚内力的基础上学习招式。
数据结构做为计算机专业的必修课程,就像“北冥神功”“易筋经”同样,是提高内功修为的绝世功法,怎么能够不学?
当你选择了本教程,你已然超越了 99% 的程序员。