程序=数据结构+算法
1.2.2
数据:能输入计算机且能被计算机处理的各种符号的集合(信息的载体,是对客观事物符号化的表示,能够被计算机识别、存储和加工)
- 数值型的数据:整数、实数
- 非数值型的数据:文字、图像、图形、声音
数据元素:是数据的基本单位,在计算机程序中通常被作为一个整体进行考虑和处理;也简称为元素,或称为记录、结点或顶点;一个数据元素可由若干个数据项组成
数据项:构成数据元素的不可分割的最小单位
数据对象:是性质相同的数据元素的集合,是数据的一个子集
数据结构
- 数据元素之间的逻辑关系,也称为逻辑结构(描述数据元素之间的逻辑关系;与数据的存储无关,独立于计算机;是从具体问题抽象出来的数据模型)
- 数据元素及其关系在计算机内存中的表示(又称之为映像),称为数据的物理结构(数据元素及其关系在计算机存储器中的结构,即存储方式;是数据结构在计算机中的表示)或数据的存储结构
- 数据的运算与实现,即对数据元素可以施加的操作以及这些操作在相应的存储结构上的实现
逻辑结构与存储结构的关系
- 存储结构是逻辑关系的映像与元素本身的映像
- 逻辑结构是数据结构的抽象,存储结构是数据结构的实现
- 两者综合起来建立了数据元素之间的结构关系
逻辑结构的种类
- 线性结构:有且仅有一个开始和一个终端节点,并且所有结点都最多只有一个直接前趋和一个后继。例如:线性表、栈、队列、串
- 非线性结构:一个节点可能有多个直接前趋和直接后继。例如:树、图
四种基本逻辑结构
- 集合结构:同属于一个集合
- 线性结构:一对一
- 树形结构:一对多
- 图状结构:多对多
存储结构的种类(四种基本的存储结构)
- 顺序存储结构:用一组连串的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示
- 链式存储结构:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示;C语言中用指针来实现链式存储数据
- 索引存储结构
- 散列存储结构
1.2.3
数据类型和抽象数据类型
数据类型的作用:约束变量或常量的取值范围,约束变量或常量的操作
数据类型的定义:数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称
数据类型=值的集合+值集合上的一组操作
抽象数据类型(ADT):是指一个数学模型以及定义在此数学模型上的一组操作
- 是由用户定义,从问题抽象出数据模型(逻辑结构)
- 还包括定义在数据模型上的一组抽象运算(相关操作)
- 不考虑计算机内的具体存储结构与运算的具体实现算法
抽象数据类型的形式定义:
抽象数据类型可用(D,S,P)三元组表示,其中:D是数据对象;S是D上的关系集;P是对D的基本操作集
一个抽象数据类型的定义如下:
算法特性:
有穷性,确定性,可行性,输入,输出
算法设计要求:
正确性,可读性,健壮性,高效性
算法分析:主要考虑算法的效率,分为两个方面
- 时间效率:指算法所耗费的时间
- 空间效率:指的是算法执行过程中所耗费的存储空间
- **时间效率和空间效率有时候是矛盾的**
算法的时间效率的度量:
- 事后统计:将算法实现,测算其时间和空间开销
- 事前分析:对算法所消耗的资源的一种估算方法(计算机执行一种简单的操作,如赋值、比较、移动所需要的时间与算法中进行的简单操作次数乘积 算法运行时间=一个简单操作所需要的时间×简单操作次数,也即算法中每条语句的执行时间之和,算法运行时间=Σ每条语句的执行次数×该语句执行一次所需的时间,语句的执行次数也称为语句频度,语句执行时间是由机器本身软硬件环境决定的)
for(i=1; i<=n; i++)// 循环变量执行n次,最后还有一次条件不成立退出循环,所以是n+1次 { for(j=1; j<=n; j++)//外面执行n次,里面循环体执行n+1次,所以执行了n*(n+1)次 { c[i][j]=0;//n*n次 for(k=0; k<n; k++)//外外层执行n n次,循环体执行n+1次,所以执行了n*n*(n+1)次 { c[i][j]=c[i][j]+a[i][k]*b[k][j];//n*n*n次 } } }
本文记录算法学习过程中的笔记