01绪论
数据结构是一门研究 非数值计算问题 中计算机的操作对象及对象之间关系和运算的学科。
1.1 基本概念和术语
(1) 数据:所有能输入到计算机中、用于描述客观事物的符号,不仅包括整型、浮点型点数值类型,还包括声音、图像、视频等非数值类型。
(2) 数据元素:组成数据的、有一定意义 的 基本单位 ,也称为结点或记录。
(3) 数据项:有独立含义的数据 最小单位 ,也称为 域。以结构体为例,一个数据元素对应一个结构体;一个数据项对应结构体变量中的一个成员。
(4) 数据的逻辑结构:数据元素之间的逻辑关系,包括:
-
集合:数据元素除同属于一个集合外,无其他关系;
-
线性结构:数据元素是一对一的关系,如线性表、栈、队列;
-
树形结构:数据元素之间是一对多的关系;
-
图状结构:数据元素是多对多的关系。
(5) 数据的存储结构:数据的逻辑结构在计算机存储器中的实现,包括
-
顺序存储结构:使用一段连续的存储空间,借助元素在内存中的相对位置来表示数据元素间的逻辑关系。逻辑上相邻的元素,其存储位置也相邻。
-
链式存储结构:无需使用连续的存储空间,借助指针来表示元素间的逻辑关系。
(6)抽象数据类型(ADT):指一个 数学模型 及定义在该模型上的一组 操作。
-
数据抽象
-
数据封装
1.2 值传递、地址传递、引用传递
引用即变量的别名,也就是为变量本身。常用于函数形参,便于实现数据的双向传递。
三种数值传递方法:值传递、地址传递、引用传递。
(1)值传递
void swap(int x, int y)
{
int temp = x;
x = y;
y = temp;
}
当执行语句 swap(a, b)
时,交换的是函数体中的局部变量,a、b 的值并未交换。
(2)地址传递
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
当执行语句 swap(&a, &b)
时,将 a、b 的地址传入函数,实现了数值交换。
(3)引用传递
void swap(int& x, int& y)
{
int temp = x;
x = y;
y = temp;
}
当执行语句 swap(a, b)
时,实际交换的也是 a、b ,故而完成了值的交换。
1.3 算法描述与算法分析
(1)算法是指解决特定问题的具体步骤描述,是指令的有限序列。其特性包括:
-
有穷性:算法必须在执行有限步骤后结束;
-
确定性:算法每一步骤必须是确切定义的,不能有二义性;
-
可行性:算法是能行的;
-
输入:有零个或多个输入;
-
输出:有一个或多个输出。
(2)算法的评价指标:
-
正确性
-
可读性
-
健壮性
-
效率
(3)时间复杂度:大 O 表示法。常用时间复杂度:
O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(n^k)<O(2^n)