数据结构
一、绪论
基本概念
-
数据对象 > 数据元素 > 数据项
- 数据对象是具有相同性质的数据元素的集合
- 数据元素是数据的基本单位,由若干数据项组成
- 据项是构成数据元素不可分割最小单位
-
数据类型:是一个值的集合和定义在该集合上的一组操作
- 原子类型:值不可再分
- 结构类型:值可以再分
-
数据结构
- 定义:数据元素 + 相互关系
- 数据的运算实质就是算法的执行,由逻辑结构定义,由存储结构实现。不能过于考虑逻辑结构,而忽略存储结构是否容易实现,逻辑结构和存储结构都影响着算法的好坏。
数据结构三要素
- 逻辑结构
- 集合:数据元素同属于一个集合,其他无任何关系
- 线性结构:数据元素之间只存在一对一的关系,如栈、队列、串、数组、其他线性表
- 树状结构:数据元素间存在一对多的关系
- 图状结构:数据元素间存在多对多的关系
- 存储结构
- 顺序存储:逻辑相邻的数据元素存储再物理上相邻的位置。
- 优点:可以实现随机存取,占用空间小
- 缺点:可能产生空间碎片
- 链式存储:不同节点只要求逻辑上相邻,但是节点内要求物理连续
- 优点:无碎片现象,元素的增删容易
- 缺点:指针占用额外的空间,只能顺序存取
- 索引存储:存储元素的同时建立索引表
- 优点:查找速度快
- 缺点:索引表占用额外的空间,增删数据需要花费时间修改索引表
- 散列存储(哈希存储):将数据元素的值映射成存储地址
- 优点:增删改查都很快
- 缺点:出现哈希冲突会增大时空开销
- 顺序存储:逻辑相邻的数据元素存储再物理上相邻的位置。
算法
- 算法的特性
- 输入:有零个或多个输入
- 有穷性:每一步均可在有穷时间内完成
- 确定性:相同的输入只能获得相同的输出
- 可行性:算法可以通过计算机基本指令实现
- 输出:至少一个输出
- 好的算法
- 正确性:正确解决问题
- 健壮性:及时处理非法数据
- 可读性:易于人们理解
- 时空开销小
- 算法效率的度量
- 时间复杂度:最深层嵌套语句运算次数的数量级
- 空间复杂度:算法耗费的存储空间,原地存储指
O(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_{2}n)<O(n)<O(nlog_{2}n)<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)
二、线性表
- 线性表:具有相同数据类型数据元素的有限序列