数据结构第一章

数据结构: 是相互之间存在一种或多种特定关系的数据元素的集合。

	If you give someone a program, you will frustrate them for a day; if you teach them how to program, youwill ftustrate them a lifetime. 									---《大话数据结构》
	如果你交给某人一个程序,你将折磨他一整天。如果你教会他们编程,你将折磨他们一生。

1.1 为什么要学习数据结构?

1. 数据结构是计算机学科的基础课程,但其有一定的难度。
2. 找工作,很多互联网公司招聘时,都会对数据结构进行考察。
3. 计算机 和 软件方面的研究生 考研的必备课程。

1.2 数据结构怎么学?

坚持上我的课,多练习,多思考。

1.3 什么时数据结构?

	数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。

	1968年,美国的高德纳教授在其所写的《计算机程序设计艺术》中,较系统的阐述了数据的逻辑结构和物理结构及其操作,开创了数据结构的课程体系。至此,世人开始了被数据结构折磨的岁月。
	
	数据结构是计算机存储、组织数据的方式,是相互之间存在一种或多种特定关系的数据元素的集合。
	
	数据结构具体指同一类数据元素中各元素之间的相互关系,包括数据结构的逻辑结构、数据的存储结构和数据的运算结构。
	在计算机科学中,数据结构不仅是一般非数值计算程序设计的基础,而且是设计和实现汇编语言、编译语言、操作系统、数据库系统,以及其他系统程序和大型应用程序的重要基础。
	
	随着互联网的发展,结构程序设计成为程序设计方法学的主要内容,人们越来越重视数据结构,认为程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。可见,数据结构在程序设计中的重要地位。
	
							程序设计 = 数据结构 + 算法

1.4 基本概念

1.4.1 数据

​ 是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整型、实型数据等数值类型,还包括字符及声音、视频等非数值类型。

1.4.2 数据元素

​ 是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称作记录。

	数据元素不能单独说,既然是元素,那么就有构成的整体,是谁的元素。元素是一个相对的概念。
	比如说,在人类中,谁是元素,当然是人。
	再比如,在我们班级中,谁是元素,就是在座的你我他。
	再比如,在我们这个地球的社会上,国家可以看做是地球的社会的元素,各个国家又被省份划分,各个省又被城市划分,接着还有区,县,镇,村。
	......

1.4.3 数据项

​ 一个数据元素可以由若干个数据项组成。数据项是数据不可再分的最小单位。

​ 比如:还是上面的那一篇文章叫做数据元素的话,点击进去之后,我们可以看到他的标题,作者,内容以及评论。而这些就是这条数据元素(记录)的数据项。把这四部分拆开来看,没有任何意义,组合在一起,你才能知道这条记录,想要想你传输的内容是什么。

1.4.4 数据对象

​ 是性质相同的数据元素的集合,是数据的子集。

1.4.5 数据结构

​ 上面解释了什么是数据,了解了数据的定义,那么下面,我们了解一个数据的结构!

​ 什么是结构?

​ 比如分子结构,就是说组成分子的院子之间的排列方式。严格的说,结构是各个组成部分相互搭配和排列的方式。在现实世界中,不同数据元素之间不是独立的,而是存在特定的关系,我们将这些关系称之为结构。

​ 数据结构: 是相互之间存在一种或者多种特定关系的数据元素的集合。

​ 比如这些桥,桥就是数据对象,每一个桥就是数据元素,每一个桥又形状,用料等不同。

​ 当然,还要说这些桥的结构。每一块石头,每一根木头不是说随随便便就放在那里就能构成一座桥,他们不是孤立的,杂乱无序的,而是具有内在联系的。

​ 同理,在计算机中,数据元素也并不是孤立的、杂乱无序的,而是具有内在联系的数据集合。数据元素之前存在一种或者多种特定的关系,也就是数据的组织形式。

​ 分析待处理对象的特征及各个处理对象之间存在的关系,就是研究数据结构的意义所在。

1.5 逻辑结构和物理结构

1.5.1 逻辑结构

逻辑结构: 是指数据对象中数据元素之间的相互关系。

逻辑结构分为四种:
	1. 集合结构: 集合结构中的数据元素除了同属于一个集合外,他们之间没有其他的关系。各个数据之间的地位是平等的,他们的共同属性是同属于一个集合。数据结构中的集合类似于数学中的集合。
	2. 线性结构: 线性结构中的元素之间是一一对应的关系。
	3. 树形结构: 树形结构中的数据元素之间存在一种多对多的层次关系。
	4. 图形结构: 图形结构的数据元素是多对多的关系。
	
	逻辑结构是针对具体的问题的,是为了解决某个问题,在对问题的理解上,选择一个合适的数据结构表示元素间的逻辑关系。

​ 集合

​ 线性结构

​ 树形结构

​ 图形结构

1.5.2 物理结构

物理结构: 是指数据的逻辑结构在计算机中的存储形式。	数据的存储结构应正确的反应数据元素之间的逻辑关系,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。

数据结构的两种存储结构:
	1.顺序存储结构: 是把数据元素存放在地址连续的存储单元中,其数据间的逻辑关系和物理关系是一致的。比如:排队,数组。
	2.链式存储结构: 是把数据元素存放在任意的存储单元中,这组存储单元可以是连续的,也可以是不连续的。比如:银行或者医院,你去了之后,先去另一个号码,然后随意坐在等候区,等到叫到你的号码之后,你再上前办理业务或者看病。
	
注意:还有索引存储结构和散列存储结构。(自行了解)

1.6 抽象数据类型

​ 数据类型: 是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。

​ 数据类型是按照值得不同进行划分的。在高级语言中,每个变量,常量和表达式都有各自的取值范围。类型就是用来说明变量或者表达式的取值范围和所能进行的操作的。

问:为什么当年设计计算机的大佬们要设计数据类型?

​ 抽象:是指取出事物具有的普遍性的本质。它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括。抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留了实现目标所必须的细节。

​ 抽象数据类型:Abstract Data Type ,ADT,是指一个数学模型及定义在改模型上的一组操作。

ADT 抽象数据类型名
Data 
	数据元素之间逻辑关系的定义
Operation 
	操作1:
		初始条件
		操作结果描述
	操作2:
		初始条件
		操作结果描述
	...
endADT

1.7 小结

1.7.1 数据结构相关的概念

​ 由这些概念,给出了数据结构的概念:数据结构之间存在一种或多种特定关系的数据元素的集合。

1.7.2 数据结构的分类