1.1 数据结构主要研究内容:
研究如何为从具体问题抽象出的数学模型设计一个算法,并为之编写程序。
记住:算法 + 数据结构 = 程序
1.2 基本概念和术语:
数据:所有能被输入到计算机的符号的统称。可以看成无数张二维表。
数据元素:数据的基本单位。可以看成二维表的一行。
数据项:组成数据元素的最小单位。可以看成二维表的一个单元。
数据对象:性质相同的数据元素的集合。可以看成一张二维表。
1.3 数据结构:
逻辑结构:描述数据元素之间的关系
1、线性结构:线性表,栈和队列,字符串,数组,广义表
2、集合结构
3、树结构:数和二叉树
4、图结构:有向图和无向图
物理结构:描述数据对象在计算机的存储结构
1、顺序结构:数据存储在一片连续的空间
2、线性结构:数据通过指针相连
1.4 抽象数据类型:
可以看成一个类或者结构体
1.5 时间复杂度:
时间复杂度用 n 来表示,n 越大,算法执行的时间越长
一条语句重复执行的次数为频度:
for (int i = 0; i < n; ++i) //频度为 n
{
for (int j = 0; j < n; ++j) //频度为 n
{...}
}
//f(n) = n*n
//时间复杂度为 O(n^2)
for (int i = 0; i < n; ++i) //频度为 n
{
for (int j = 0; j < 2; ++j) //频度为 2
{...}
}
//f(n) = 2*n
//时间复杂度为 O(n)
1.6 空间复杂度:
for (int i = 0; i < n; ++i)
a[i] = t;
//只使用了一个 t ,空间复杂度为 O(1)
for (int i = 0; i < n; ++i)\
a[i] = b[i];
//使用了大小为 n 的 b[n] , 空间复杂度为 O(n)
通常,时间复杂度和空间复杂度呈反比,但由于存储空间充足,所以分析算法主要以时间复杂度为主。