数据结构 第一章 绪论
1.1 什么是数据结构
-
基本上每一个新的名词出现,都要了解一下它,我的理解就是数据结构是由硬件和软件及数学进行交互产生的,对待实际的问题,都有不同的结构。很抽象,每个人有每个人的理解,大致相近就行了。百度上的答案是:数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素的集合。它包含三方面的内容,逻辑关系、存储关系以及操作。
==暂时没有合适的图,后面补==
1.2数据结构的基本概念和术语
-
1、数据:
对客观事物的符号表示。简单理解就是所有能输入到计算机中并被计算机程序处理的符号的总称。(举个例子嘛输入的数字,字符,等等。值得强调的是数据的定义很广泛,图像、声音等也算数据。) -
2、数据元素:
数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。但数据元素还不是最小的单位。数据元素有时是由多个数据项组成的,而数据项是数据的最小单位。为了更好的理解,我举两个例子。(1)人口普查时,一个家庭代表一个数据元素,每个人代表一个数据项,一家有三口人,那么这个数据元素(一个家庭)就有三个数据项(三口人)。(2)你要给10个数根据大小来进行排序,那么每一个数都是你的数据元素。 -
3、数据对象:
数据对象是性质相同的数据元素的集合,是数据的一个子集。 -
4、数据结构:
-
数据结构分为对操作对象的数学描述即逻辑结构,以及在计算机中的表示(又称影响)即物理结构(又称储存结构)。
逻辑结构
书上的正规简单解释是数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构有4种基本结构,分别是(1)集合(2)线性结构(3)树形结构(4)图状结构或网状结构。
(1)集合:结构中的数据元素除了”同属于一个集合“的关系外,别无其他的关系。==暂时没有合适的图,后期补==
(2)线性结构:结构中的数据元素之间存在一个元素对一个元素的关系。
==暂时没有合适的图,后面补==
(3)树型结构:结构中的数据元素之间存在一个元素对多个元素的关系。
==暂时没有合适的图,后面补==
(4)图状结构或网状结构:结构中的数据元素之间存在多个元素对多个元素的关系。
==暂时没有合适的图,后面补==
以上我们是数据结构中逻辑结构。
物理结构(存储结构)
在计算机中表示信息的最小单位是二进制数的一位,叫做位(bit),我们可以用若干个位组合成一个位串表示一个数据元素,通常称这个位串为元素或节点,当数据元素由多个数据项组成的时侯,每个数据项对应的子位串被成为数据域。
数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,并由此得到两种不同的储存结构,顺序储存结构和链式储存结构。
简单的理解一下,顺序储存结构就是在计算机的储存空间中,我们是按照顺序进行储存,而链式储存结构则不然,链式储存结构是利用指针进行逻辑上的相连,在储存位置上并不要求连续。
- 5、数据类型:
数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
按照值的不同可以分为两类==(1)原子类型(2)结构类型==
(1)原子类型:原子类型的值不可分解,如基本类型(整形,实型,字符型…)。
(2)结构类型:由多种类型按照一定结构组成,可分解,成分可以是非结构的也可以是结构的。(例如c语言中的结构体)。 - 6、抽象数据类型(简称ADT):
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作,且不论其内部结构如何变化,只要他的数学特性不变,都不影响其外部使用。(我的理解就是抽象数据类型就类似于c语言的函数,函数内部你怎么写都可以,只要输出的结果一致就行。)
抽象数据类型可以分为3种类型==(1)原子类型(2)固定聚合类型(3)可变聚合类型==
(1)原子类型:属原子类型的变量的值是不可分解的。
(2)固定聚合类型:属该类型的变量,其值由确定数目的成分按某种结构组成
(3)可变聚合类型:和固定聚合类型相比较,构成可变聚合类型”值“的成分的数目不确定
多型数据类型:指其值的成分不确定的数据类型。
1.3抽象数据类型的表示与实现
这里的知识基本都是实际操作,不作示例,将在跟进的c++学习笔记种使用。
1.4算法和算法分析
- 算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作,此外算法有五个重要特征:(1)有穷性(2)确定性(3)可行性(4)输入(5)输出
(1)有穷性:一个算法必须是(对任何而合法的输入值)在执行的有穷部之后结束,且每一步都可在有穷时间内完成。
(2)确定性:算法中的每一条指令必须有确切的含义,读者理解是不会产生二义性。并且算犯法只有唯一的执行路径,对于相同的输入只能得出相同的输出。
(3)可行性:一个算法是能行 ,即算法描述的操作都是可以通过以及实现的基本运算执行有限次来实现。
(4)输入:一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。
(5)输出:一个算法有一个或多个的输出,这些输出是同输入有着某些特定关系的量。
一个算法要是”好“算法必须考虑以下4点:(1)正确性(2)可读性(3)健壮性(4)效率与低储存需求
(1)正确性:算法应当满足具体问题的需求
(2)可读性:算法是为了人的阅读与交流,其次才是机器执行。
(3)健壮性:简单来说就是当你的输入并未按照你的需求时,你的代码能做出反应,告诉输入的人,他并没有按照正确的输入格式,而不是胡乱的输出莫名其妙的值。
(4)效率与低储存需求:通俗的说效率就是指算法执行的时间。
*算法分析:
着重讲时间复杂度:表示随问题规模n的增大,算法执行时间的增长率和重复执行次数增长率相同。 - 具体计算机运行的时间复杂度日后在此处弥补