文章目录
第一章绪论
1.1数据结构的基本概念和术语
1.1.1数据
是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。
1.1.2数据元素
是数据的基本单位,在计算机中通常作为一个整体去考虑和处理。在有些情况下,数据元素也叫做元素,记录等。数据元素用于完整地描述一个对象
1.1.3数据项
是组成数据元素的,有独立含义的,不可分割的最小单位。
1.1.4数据对象
性质相同的数据元素的集合,是数据的一个子集。
1.2数据结构
数据结构是相互之间存在的一种或者多种特定关系的数据元素的集合。换句话说,数据结构就是带“结构”的数据元素的集合,“结构”就是数据元素之间存在的关系。数据结构包括逻辑结构和存储结构两个层次。
1.2.1逻辑结构
数据的逻辑结构是从逻辑关系上描述数据,他与数据的存储无关,是独立于计算机的。因此数据的逻辑结构可以看作是从具问题抽象出来的数学模型
1.集合结构
数据元素之间除了“属于同一集合”的关系外,无其他关系。
2.线性结构
数据元素之间存在一对一的关系
3.树结构
数据元素之间存在一对多的关系
4.图结构或者网状结构
数据元素存在多对多的关系
1.2.2存储结构
数据对象在计算机中的存储表示称为数据的数据结构,也称为物理结构。把数据对象存储到计算机时,通常要求既要存储个数据元素的数据,又要存储数据元素之间的逻辑关系。
1.顺序存储结构
顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑位置,通常借助程序设计语言的数组类型来描述。
2.链式存储结构
顺序存储结构要求所有的元素依次存放在一片连续的存储空间中,而链式存储结构,无需占用一整块存储空间。但是为了表示节点之间的关系,需要给每个节点上附加指针字段,用于存放后继元素的存储地址。所以链式存储结构通常借助于程序结构设计语言的指针类型来描述。
1.3数据类型和抽象数据类型
1.3.1数据类型
数据类型是一个值的集合和定义在这个集合上的一系列操作的总称
比如:C语言里面的整型变量,他就是某区间内的整数以及定义在这些整数上的加减乘除取模等运算的总称
1.3.2抽象数据类型
举例说明,计算机使用二进制表示数据,汇编语言就抽象了二进制,给出各种数据的十进制表示方式,而在高级语言里,用户可以抽象基本数据类型得到抽象的数据类型,如线性表,树,图等
&表示的是引用,除了提供参数以外,还可以返回操作结果。
1.4算法和算法评价
算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列5个重要特性:
-
有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
-
确定性。算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
-
可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
-
输入。一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
-
输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量,
通常,设计一个“好”的算法应考虑达到以下目标:
-
正确性。算法应能够正确地解决求解问题,
-
可读性。算法应具有良好的可读性,以帮助人们理解。
-
健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的输出结果。
-
效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所需要的最大存储空间,这两者都与问题的规模有关。
1.4.1时间复杂度
“常对幂指阶”
O
(
1
)
<
O
(
l
o
g
2
n
)
<
O
(
n
)
<
O
(
n
l
o
g
2
n
)
<
O
(
n
2
)
<
O
(
2
n
)
<
O
(
n
!
)
<
O
(
n
n
)
O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(2^n)<O(n!)<O(n^n)
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(2n)<O(n!)<O(nn)
1.4.2空间复杂度
定义变量和函数调用会带来内存开销
空间复杂度是函数调用的深度
内存的动态分配:分配空间 指针量=new 数据类型
释放空间 delete 指针变量
内存的动态分派 分配空间 (指针类型)malloc(sizeof(数据类型)*数据个数)