引入:
哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家知道的是:数据结构非常有趣,很多算法是智慧的结晶,我希望大家在学习数据结构的过程是一种愉悦的心情感受。因此我开创了《数据结构》专栏,在这里我将把数据结构内容以有趣易懂的方式展现给大家。
1.数据结构的起源
早期人们都把计算机理解为数值计算工具,就是感觉计算机时用来计算的。所以计算机解决问题时,应该是先从具体问题中抽象出一个适当的数据类型,设计出一个解此数据模型的算法,然后在编写程序,得到一个实际的软件。
可现实中,我们更多的不是解决数值计算的问题,而是需要一些科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好的解决问题。所以:数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的关系和操作等相关等问题的学科。这样看来是不是有点难以理解,我直接简单点概括:研究数据在计算机中的存储方式。1968年,美国的高德纳教授在其所写的《计算机程序设计艺术》第一卷《基本算法》中,较系统地阐述了数据的逻辑结构和存储结构及其操作,开创了数据结构的课程体系。同年,“数据结构”作为一门独立的课程,在计算机科学的学位课程中开始出现,也就是说,从那之后计算机相关专业的学生开始接收“数据结构”的“折磨”--其实说是享受才对。
2.基本概念和术语
说到数据结构是什么,我们得先来了解什么时数据。正所谓“巧妇难为无米之炊”,再强大的计算机,也是要有“米”下锅才可以干活的,否则就是一堆破铜烂铁,这个“米”就是数据。
2.1数据
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别的,并输入给计算机处理的符号集合,数据不仅仅包括整型、实型等数值类型,还包括字符及声音、图片、视频等非数值类型。比如我们现在常用的一些搜索引擎,一般会有网页、图片、视频等分类,图片是图像数据、音频当然是声音类型,视频更不用说了,而网页其实指的就是全部数据的搜索,包括重要的数字和字符等文字数据。再比如我们在学校学习的各种各样的知识都可以成为数据,分享给大家使用。也就是说,我们这里说的数据,其实就是符号,而这些符号必须具备两个前提:
- 可以输入到计算机中
- 能被计算机程序处理
2.2数据元素
数据元素:是组成数据的、具有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。比如:在人类中什么是数据元素,当然是人啦。
2.3数据项
数据项:一个数据元素可以由若干个数据项组成,比如人这样的数据元素,可以有眼睛、耳朵、手等这些数据,也可以有姓名、年龄、性别等数据。数据项是数据不可分割的最小单位。在“数据结构”中,我们把数据项定义为最小的单位,是有助于我们解决问题的,所以,记住数据项是数据的最小单位。但当我们真正讨论问题的时候,数据元素才是数据结构中建立数据模型的着眼点。当我们讨论一本书时,是讨论这本书里面的角色这样的“数据元素”,而不是针对这些角色的姓名、年龄这些展开讨论。
2.4数据对象
数据对象:是性质相同的数据元素的集合,是数据的子集。什么叫性质相同,是数据元素相同数量和类型的数据项,比如,在刚才的例子中,人都有姓名、性别等相同的数据项。既然数据对象是数据的子集,在实际应用中,处理的数据元素通常具有相同的性质,在不产生混肴的情况下,我们都将数据对象简称为数据。
2.5数据结构
结构简单点来说就是关系,比如在化学中我们学过的分子结构,就是说组成分子的原子之间的排列方式。严格点说,结构是指各个组成部分相互搭配和排列的方式。在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称为结构,那数据结构是什么呢?数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在计算机中,数据元素并不是孤立、杂乱无章的,而是具有内在联系的数据集合,数据元素之间存在的一种或者多种特定关系,也就是数据的组成形式。
3.逻辑结构和物理结构
按照视点的不同,我们把数据结构分为了逻辑结构和物理结构两部分。
3.1逻辑结构
逻辑结构:是指数据对象中数据元素之间的相互关系。逻辑结构主要分为4种。
3.1.1集合结构
集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间又没有其他的关系。各个数据元素是“平等的”,他们的共同属性是“同属于一个集合”。数据结构中的集合关系就类似于数学中的集合。
3.1.2线性结构
线性结构:线性结构中的数据元素之间是一对一的关系。
3.1.3树形结构
树形结构:树型结构中的元素之间存在一种一对多的层次关系。(有点像我们的族谱)
3.1.4图形结构
图形结构:图形结构的数据元素是多对多的关系。
我们在用示意图表示数据的逻辑结构时,要注意两点:
- 将每一个数据元素看作一个结点,用圆圈表示。
- 元素之间的逻辑关系用结点之间的连线表示。如果这个关系是有方向的,那就像我这个一样用箭头表示。
3.2 物理结构
物理结构:是指数据的逻辑结构在计算机中的存储形式。数据的存储结构正确反映数据元素之间的逻辑关系这才是最为关键的,数据元素的存储结构形式有两种:顺序存储和链式存储。在未来我们学习顺序表和链表时会更加深入学习。
3.2.1顺序存储结构
顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。这种存储结构说来也简单,就是排队,数组元素都按顺序排好,每个元素占一小段空间。和我们学习过的数组一样。
3.2.2链式存储结构
链式存储结构:把数据元素存放在任意的存储单元里面,这组存储单元可以是连续的,也可以是不连续的。打个比方:就像我们去医院挂号,每个人去领个号,等待的时候你想去哪就去哪,只要及时回来就行。数据元素的存储关系并不能反映他的逻辑关系,因此需要一个指针存放数据元素的地址,这样就能通过地址找到相关数据元素的位置了。