前言
数据结构是计算机存储、组织数据的方式。
数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
一、基本概念和术语
- 数据
- 客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
- 数据元素
- 数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
- 数据对象
- 性质相同的数据元素的集合,是数据的一个子集。
- 数据结构
- 相互之间存在一种或多种特定关系的数据元素的集合。
- 在任何问题中,数据元素都不说孤立存在的,而是他们之间存在某种关系,这种数据元素相互之间的关系称为结构
- 常见逻辑结构
- 集合
- 线性结构
- 树形结构
- 图状结构或网状结构
- 存储结构
- 顺序存储结构:采用一组连续的存储单元存放所有的数据元素,数据元素之间逻辑结构相邻,存储结构也相邻
- 链式存储结构:每一个逻辑元素用一个内存结点存储,每个结点是单独分配的,所有的结点地址不一定是连续的,他们之间用指针将所有的结点链接起来
- 数据之间的结构
- 物理结构:数据元素及其关系在计算机存储器中的存储表示,也称为数据的存储结构
- 逻辑结构:表示数据元素之间的逻辑关系
- 数据存储空间分配
- 静态存储空间分配:int num[10];
- 动态存储空间分配:malloc()函数
二、抽象数据类型
抽象数据类型简称ADT(Abstract Data Type)
- 数据类型和抽象数据类型的区别
数据类型和抽象数据类型是与数据结构密切相关的两个概念
数据类型是一个值的集合和定义在此集合上的一组操作的总称。例如:C语言中的整型,浮点型,他们的取值范围不同,进行运算时所遵循的规范也不同
抽象数据类型=逻辑结构+抽象运算,只是一个数学模型以及定义在模型上的一组操作。通常是对数据的抽象,定义了数据的取值范围以及对数据操作的集合,也可将数据类型和抽象数据类型看成一种概念。比如计算机都拥有的整数类型就是一个抽象类型,尽管实现方法不同,但他们的数学特性相同 - 抽象数据类型格式
- 抽象数据类型用三元组表示(D,S,P),D是数据对象,S是D上的关系集,P是对D的基本操作集
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
三、算法
所谓算法,即解决问题的方法。同一个问题,使用不同的算法,虽然得到的结果相同,但耗费的时间和资源肯定有所差异。就比如拧一个螺母,扳手和钳子都可以胜任,但使用钳子拧螺母肯定没有扳手的效率高
- 算法的特性
- 有穷性:一个算法都在有穷时间内完成
- 确定性:算法每一条指令必须有确切的含义,读者理解时不会产生二义性
- 可行性:一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的
- 输入:一个算法有零次或多个的输入
- 输出:一个算法有一个或多个的输出
- 算法设计的要求
- 正确性
- 可读性
- 健壮性
- 效率与低存储量需求
三、算法效率
- 事后统计法:缺点 受计算机配置的影响
- 事前估算法:通过分析某个算法的时间复杂度来判断哪个算法更优
时间复杂度
一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作 T(n)=O( f(n) ),称O( f(n) ) 为算法的渐进时间复杂度,简称时间复杂度。
空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度