《数据结构》这门学科形成和发展的背景:
为了编写出一个“好”的程序,必须分析待处理的对象的特性以及各处理对象之间存在的关系。
1.1
什么是数据结构
(
1
)用计算机解决一个具体问题时的步骤:
a.从具体问题抽象出一个适当的数学模型。
b.设计一个解此数学模型的算法。
c.编出程序,进行测试,调试直至得到最终解答。
(
2
)《数据结构》课程研究什么,概念是什么:
《数据结构》是一门研究非数值计算的程序设计的问题中计算机的操作对象以及它们之间的关系和操作等等的学科。
(
3
)《数据结构》是介于数学,计算机硬件和计算机软件三者之间的一门核心课程。
1.2
基本概念和术语
(
1
)
数据(
Data
)------ 是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
(
2
)
数据元素(
Data Element
)------ 是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。一个数据元素可由若干个数据项(Data Item)组成。数据项是数据的不可分割的最小单位。
(
3
)
数据对象(
Data Object
)------ 是相互之间存在一种或者多种特定关系的数据元素的集合。
(
4
)
结构(
Structure
)------ 在任何问题中,数据元素都不是孤立存在的,而是在它们之间存在着某种关系,这种数据元素相互之间的关系,我们叫做---结构(Structure)。结构定义中的“关系”描述的是数据元素之间的逻辑关系,故又叫作---
逻辑结构。
(
5
)
根据数据元素相互之间的不同特性,我们对结构进行分类:
a.
集合---结构中的数据元素之间除了“同属于一个集合的关系外,别无其他关系”。
b.
线性结构---结构中的数据元素之间存在一个对一个的关系。
c.
树形结构---结构中的数据元素之间存在一个对多个的关系。
d.
图状结构或者网状结构---结构中的数据元素之间存在多个对多个的关系。
(
6
)数据结构的形式定义:
数据结构是一个二元组 Data_Structure = (D, S) 其中,D是数据元素的有限集,S是D上关系的有限集。
(
7
)物理结构(存储结构)------是数据结构在计算机中的表示(有称映像),它包括数据元素的表示和关系的表示。在计算机中表示欣喜地最小单元是二进制数的一位叫作位(Bit)。在计算机中,我们可以用一个由若干位组合起来形成的一个位串表示一个数据元素,通常称这个位串为元素(Element)或者结点(Node)。当数据元素有若干数据项组成时,位串中对应于各个数据项的子位串称为数据域(Data Field)
(
8
)数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。其中,顺序映像的特点是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像的特点是借助指示元素存储地址的指针(Pointer)表示数据元素之间的逻辑关系。
注意:任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。
(
9
)数据类型(
Data Type
)------数据类型是一个值的集合和定义在这个集合上的一组操作的总称。
(
10
)
数据类型的分类:(根据
“
值
”
的不同特性)
a.非结构的原子类型。
b.结构类型。结构类型的值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是非结构的,也可以是结构的。
(
11
)抽象数据类型(
Abstract Data Type
简称
ADT
)---是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型和数据类型的实质上是一个概念。
(
12
)抽象数据类型的组成-----一个含抽象数据类型的软件模块通常应该包含定义,表示和实现三个部分。
(
13
)抽象数据类型的分类:(按
“
值
”
的不同特性)
a.原子类型(Atomic Data Type)属于原子类型的变量的值是不可分割的。
b.固定聚合类型(Fixed Aggregate Data Type)属于该类型的变量,其值由确定树木的成分按某种结构组成。
c.可变聚合类型(Variable Aggregate Data Type)和固定聚合类型相比较,构成可变聚合类型“值”的成分的数目不确定。
b和c统称为结构类型。
(
14
)抽象数据类型的形式定义------(D, S, P),其中D是数据对象,S是D上的关系集,P是对D的基本操作的集。
(
15
)多型数据类型(
Polymorphic Data Type
)------是指其值的成分不确定的数据类型。从抽象数据类型角度看,具有相同的数学抽象特性,故称之为多形数据类型,显然,需要借助面向对象的程序设计语言如C++等实现之。
1.3
抽象数据类型的表现和实现
因为讲的都是语法和规则,故省略之。
1.4
算法和算法分析
(
1
)算法(
Algoritbm
)的概念------是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一个或多个操作。
(
2
)算法的特性:
a.有穷性---一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有穷时间内完成;
b.确定性---算法中每一条指令必须有确切的含义,读者理解时不会产生二义性;
c.可行性---一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的;
d.输入---一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合;
e.输出---一个算法有一个或多个的输出;
(
3
)一个
“
好
”
的算法应实现的目标:
a.正确性(Correctness)
正确的含义:
一,程序不含语法错误;
二,程序对于几组输入数据能够得出满足规格说明要求的结果;
三,程序对于精心选择的典型,苛刻而带有刁难性的几组输入数据能够得到满足规格说明要求的结果;
四,程序对于一切合法的输入数据都能产生满足规格说明要求的结果。
注意:一般来说,通常以第三层意义的正确性作为衡量一个程序是否合格的标准。
b.可读性(Readability)
c.健壮性(Robustness)
d.效率与低存储量需求
通俗的说,效率指的是算法执行时间。存储量需求指的是算法执行过程中所需要的最大存储空间。
(
4
)算法效率的度量
度量的方法:
第一,事后统计的方法:
概念:
因为很多计算机内部都有计时功能,有的甚至可精确到毫秒级,不同算法的程序可通过一组或者若干组相同的统计数据以分辨优劣。
缺点:
必须先运行依据算法编制的程序。
所得时间的统计量依赖于计算机的硬件,软件等环境因素,同时容易掩盖算法本身的优劣。
第二,事前分析估算的方法:
程序在计算机上运行时所消耗的时间取决于下列因素:
依据的算法选用何种策略。
问题的规模。
书写程序的语言,对于同一个算法,实现语言的级别越高,执行效率越低。
变异程序所产生的机器代码的质量。
机器执行指令的速度。
事前分析估算的方法的概念:
撇开上述与计算机硬件,软件有关的因素,仅仅考虑特定算法的“运行工作量”的大小,即考虑问题的规模,这种方法叫做事前分析估算的方法。
算法的渐进时间复杂度(Asymptotic Time Complexity)的概念(时间复杂度)
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作:T(n) = O(f(n))它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,这个T(n)叫做算法的渐进时间复杂度(Asymptotic Time Complexity),简称时间复杂度。
语句的频度(
Frequency Count
)------ 指的是该语句重复执行的次数。
(
5
)算法的存储空间需求
a.
空间复杂度(
Space Complexity
)------ 算法所需存储空间的量度,
记作S(n)= O(f(n)),其中,n为问题的规模(或大小)。
b.
算法的存储量包括:输入数据所占空间,程序本省所占空间,辅助变量所占空间。
c. 若输入数据所在空间只取决于问题的本身和算法无关,则只需要分析除输入和程序之外的额外空间,否则应同时考虑输入本身所需空间(和输入数据的表示形式有关)。若额外空间相对于输入数据量来说是常数,则称此算法为原地工作,又如果所占空间量依赖于特定的输入,则除了特别指明外,均按照最坏情况来分析。
|