**数据结构基础知识**
1.数据结构:
(1)数据元素之间的逻辑关系,被称为逻辑结构
(2)数据元素及其关系在计算机内存中表示(映像),称为数据的物理结构或存储结构
(3)数据的运算和实现
2.数据结构的层次
(1)逻辑结构:
-
线性结构:有且只有一个开始和一个终端节点,并且所有节点最多,只有一个直接前趋和一个直接后继(线性表,栈,队列,串)
-
非线性:一个节点可能有多个直接前趋和后继:树,图
-
数据元素之间的关系与数据存储无关,独立于计算机从具体问题抽象出来的数学模型
(2)物理结构
- 集合:(同属于一个集合)线性结构 (一对一) 树形结构(一对多) 图状结构(多对多)
- 存储方式:数据结构在计算机中的表示
(3)逻辑和物理的关系
- 存储结构是逻辑关系的映像与元素本身的映像
- 逻辑结构是数据结构的抽象,存储结构是数据结构的实现
3.四种存储结构
(1)顺序结构:连续的存储单元依次存储数据元素,数据元素之间逻辑关系由元素位置来表示
(2)链接存储结构:用一组任意的存储单元存储数据元素,数据元素之间逻辑关系用指针表示
(3)索引存储(索引表)
(4)散列存储:根据节点的关键字直接计算出该节点的存储地址
4.数据类型
(1)抽象数据类型(ADT)
(2)(D,S,P)三元组
D:数据对象 S:是D上的关系集 P:对D的基本操作集
(3)基本操作定义格式:
赋值参数只为操作提供输入值
引用参数以&打头,除了提供输入值外,还将返回操作结果
typedef struct{
float realpart; //实部
float imagpart; } //虚部
Complex //定义复数抽象类型
void assign(Complex *A ,float real ,float imag);
void add(Complex *A ,float real ,float imag);A + B
void minus(Complex *A ,float real ,float imag);A - B
void multiply(Complex *A ,float real ,float imag);A * B
void divide(Complex *A ,float real ,float imag);A/B
C语言实现:
void assign(Complex *A ,float real ,float imag){
A-> realpart = real; //实部赋值
A-> imagoart = imag; //虚部赋值
}
void add (Complex *c ,Complex *A ,Complex *B) {//c = A+B
c -> realpart = A.realpart + B.realpart;//实部相加
c -> imagpart = A.imagpart + B.imagpart;//虚部相加
}
5.算法和算法分析要求
正确性,可读性,健壮性,高效性
(1)算法时间效率的度量
- 一个算法的运行时间是指一个算法在计算机上运行所耗费的时间大致可以等于计算机执行一种简单操作(赋值,比较等)所需的时间与算法中进行的简单操作次数的乘积
算法运行时间 = 一个简单操作所需的时间*简单操作数
- 算法中每条语句的执行时间之和
算法运行时间 = 每条语句的执行次数* 该语句执行一次所需的时间(所有加在一起的和)
- 算法消耗的时间定义为该算法中每条语句的频率之和
T(n) = 2n^3 + 3n^2 + 2n +1(关于n的函数…)
- 改进算法的时间复杂度:为了比较不同算法的时间效率,仅仅比较他们的数量级
一般只考虑算法中基本操作执行的次数,不计算所有操作的执行次数,它是问题规模n的某个函数,用T(n)表示
分析算法时间复杂度的基本方法(找出嵌套层次最深的那个语句频度)
T(n) = O(f(n))(算法中基本语句重复执行的次数是解决问题规模n的某个函数f(n))