目录
数据结构的基本概念
基本概念和术语
1.数据
数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料
2.数据元素
数据元素是数据的基本单位,通常作为一个整体进行考虑和处理。
3.数据项
一个数据元素可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位
4.数据对象
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
5.数据类型
数据类型是一个值的集合和定义在此集合上的一组操作的总称
1.原子类型。其值不可再分的数据类型。(bool,int,char)
2.结构类型。其值可以再分解为若干成分(分量)的数据类型。(struct)
3.抽象数据类型。抽象数据组织及与之相关的操作。(class)
5.数据结构
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据元素相互之间的关系称为结构。数据结构包括:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构密不可分,算法的设计取决于逻辑结构,算法的实现依赖于存储结构。
数据结构的三要素
数据的逻辑结构
- 集合
- 线性结构
- 树形结构
- 图状结构或网状结构
数据的存储结构
1.顺序存储
2.链式存储
3.索引存储
4.散列存储
数据的运算
施加在数据上的运算包括运算的定义和实现
本节错题本
选择题
1.以下属于逻辑结构的是( C )
A.顺序表 B.哈希表 C.哈希表 D.单链表
解析:易错选D
只有有序表是只属于逻辑结构,其他的均是一种完整的数据结构。
2.以下与数据的存储结构无关的术语是(D)
A.循环队列 B.链表 C.哈希表 D.栈
解析:易错选C
只有栈是只属于逻辑结构,其他的均是一种完整的数据结构,易错点:循环队列是用顺序存储实现的,如果用链表实现的话就属于循环链表了,而不叫循环队列
3.链式存储设计时,节点内的存储单元地址(A)
A.一定连续 B.一定不连续 C.不一定连续 D.部分连续,部分不连续
解析:易错选C
综合应用题
1.对于两种不同的数据结构,逻辑结构或物理结构一定不相同吗?
答:不一定,数据结构包括逻辑结构,物理结构,运算方法三部分,所以还有可能逻辑结构和物理结构均相同,但运算方法不相同的数据结构。
2.试举一例,说明对相同的逻辑结构,同一种运算在不同的存储方式下实现时,其运算效率不同。
答:线性表的顺序存储和链式存储在查找,删除,插入方面的运算效率不同。
小知识
线性表,有序表,顺序表三个名词的区别,线性表,有序表属于逻辑结构,且有序表是一种特殊的线性表(按照某种顺序排列),顺序表包含逻辑结构,物理结构,运算方法三部分,是完整的数据结构,且是线性表的顺序存储形式,线性表的链式存储形式是链表。
算法和算法评价
算法的基本概念
算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。此外,一个算法还具有下列5个重要特性:
1)有穷性。一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。
2)确定性。算法中每条指令必须有确切的含义,对于相同的输入只能得出相同的输出。
3)可行性。算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。
4)输入。一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。
5)输出。一个算法有一个或多个输出,这些输出是与输入有着某种特定关系的量。
通常,设计一个“好”的算法应考虑达到以下目标:
1)正确性。算法应能够正确地解决求解问题。
2)可读性。算法应具有良好的可读性,以帮助人们理解。
3)健壮性。输入非法数据时,算法能适当地做出反应或进行处理,而不会产生莫名其妙的
输出结果。
4)高效率与低存储量需求。效率是指算法执行的时间,存储量需求是指算法执行过程中所
需要的最大存储空间,这两者都与问题的规模有关。
算法效率的度量
算法效率的度量是通过时间复杂度和空间复杂度来描述的。
时间复杂度
一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记为T(n),它是该算法问题规模n的函数,时间复杂度主要分析T(n)的数量级。算法中基本运算(最深层循环内的语句)的频度与T(n)同数量级,因此通常采用算法中基本运算的频度f(n)来分析算法的时间复杂度。因此,算法的时间复杂度记为
T
(
n
)
=
O
(
f
(
n
)
)
T\left ( n \right )= O\left ( f\left ( n \right ) \right )
T(n)=O(f(n))
最坏时间复杂度是指在最坏情况下,算法的时间复杂度。
平均时间复杂度是指所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
最好时间复杂度是指在最好情况下,算法的时间复杂度。
一般总是考虑在最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。
在分析一个程序的时间复杂性时,有以下两条规则:
a)加法规则
T
(
n
)
=
T
1
(
n
)
+
T
2
(
n
)
≐
O
(
f
(
n
)
)
+
O
(
g
(
n
)
)
=
O
(
m
a
x
(
f
(
x
)
,
g
(
x
)
)
)
T\left ( n \right )=T1\left ( n \right )+T2\left ( n \right )\doteq O\left ( f\left ( n \right ) \right )+O\left ( g\left ( n \right ) \right )=O\left ( max\left ( f\left ( x \right ),g\left ( x \right ) \right ) \right )
T(n)=T1(n)+T2(n)≐O(f(n))+O(g(n))=O(max(f(x),g(x)))
b)乘法规则
T
(
n
)
=
T
1
(
n
)
+
T
2
(
n
)
=
O
(
f
(
n
)
)
×
O
(
g
(
n
)
)
=
O
(
f
(
n
)
×
g
(
n
)
)
T\left ( n \right )=T1\left ( n \right )+T2\left ( n \right )=O\left ( f\left ( n \right ) \right )\times O\left ( g\left ( n \right ) \right )=O\left ( f\left ( n \right ) \times g\left ( n \right )\right )
T(n)=T1(n)+T2(n)=O(f(n))×O(g(n))=O(f(n)×g(n))
常见的渐进时间复杂度为
O
(
1
)
<
O
(
log
2
n
)
<
O
(
n
)
<
O
(
n
log
2
n
)
<
O
(
n
2
)
<
O
(
n
3
)
<
O
(
2
n
)
<
O
(
n
!
)
<
O
(
n
n
)
O\left ( 1 \right )< O\left ( \log_{2} n \right )< O\left ( n \right )< O\left ( n\log _{2}n \right )< O\left ({n_{}}^{2}\right )^{}< O\left ( {n_{}}^{3} \right )< O\left ( {2_{}}^{n} \right )< O\left ( n! \right )< O\left ( {n_{}}^{n} \right )
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
### 空间复杂度
算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它是问题规模n的函数。记为
S
(
n
)
=
O
(
g
(
n
)
)
S\left ( n \right )=O\left ( g\left ( n \right ) \right )
S(n)=O(g(n))
本节错题本
选择题
1.一个算法应该是(B).
A.程序
B.问题求解步骤的描述
C.要满足五个基本特性
D. A和C
解析:易错选C
C选项的五个基本特性只是算法的必要条件,不能成为算法的定义
2.某算法的时间复杂度为O(n2),表明该算法的(C)。
A.问题规模是n^2
B.执行时间等于n^2
C.执行时间与n^2成正比
D.问题规模与n成正比
解析:易错选D
记住问题规模是n不是n^2
3.下面的说法中,错误的是(A)
I.算法原地工作的含义是指不需要任何额外的辅助空间
II.在相同规模n下,复杂度为O(n)的算法在时间上总是优于复杂度为O(2^n)的算法
III.所谓时间复杂度,是指最坏情况下估算算法执行时间的一个上界
IV同一个算法,实现语言的级别越高,执行效率越低
A. I B. I,II C.I,IV,D.III
解析:易错选D
算法原地工作是指算法所需的辅助空间是常量
综合应用题
小知识
程序=数据结构+算法。同一个算法,实现语言的级别越高,执行效率越低。