## 第一个篇文章:数据结构学习的开始。
1.1什么是数据结构
- 背景
面临问题->设计解决问题的数学模型->设计解决问题的算法->编程->解决问题。
在设计数学模型时就会用到出现各种数据,它们之间会有各种关联,数据结构大致指的就是数据与其关联。
1.2 基本概念及术语
-数据(data):输入计算机的所有东西。
-数据元素(data element):数据的基本单位
-数据项(data item):数据不可分割的最小单位,具有独立含义。
-数据对象(data object):性质相同的数据元素集合,是数据的子集。
-数据结构:相互之间存在一种或者多种特定关系的数据元素的集合。(集合/线性/树形/图状)
-逻辑结构:对操作对象抽象出数学模型,得到的元素之间的逻辑关系。
-储存结构(物理结构):将数据结构在计算机中的表示
-顺序映像->顺序存储结构:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。(特点是什么?带来什么优缺点?适合用在什么地方?)
-非顺序映像->链式存储结构:数据与指针结合,形成连接。(特点是什么?带来什么优缺点?适合用在什么地方?)
-数据类型(data type)刻画数据特征,规定数据范围。
-抽象数据类型(abstract data type):一个数学模型在该模型上的一组操作。
——(D,S,P)数据对象/关系集/操作集
1.3抽象数据类型的表示与实现
- (1)预定义常量和类型
#define FALSE 0
#define TRUE 1
#define OK 0
#define OVERLOW -2
//status函数类型,值是函数结果状态代码
typedef int Stadus;
- (2)数据结构表示(存储结构)用类型定义(typedef)描述。数据类型约定为ElemType,由实际需求去定义。
- (3)操作类型描述
函数类型 函数名 (参数){
//算法说明
语句}//函数名
1.4算法和算法分析
-
算法特征
(1)有穷性
(2)确定性
(3)可行性
(4)输入
(5)输出 -
算法设计要求
(1)正确性:算法正确性是对任意一个合法的输入经过有限步执行之后算法应给出正确的结果。其中“正确”的含义包括以下三个方面:
1算法对几组不同的输人数据能够得出满足要求的结构。
2算法对于精心选择的典型、苛刻而带有刁难性的输入数据能够得出满足要求的结果。
3算法对于一切合法的输入数据都产生满足要求的结果。
算法正确性证明包括两个方面:①证明关于输入与输出之关系的命题是正确的;②证明算法中的公式及计算方法是正确的。
正确性是对算法最基本、最重要的要求
(2)可读性
(3)健壮性:当遇见输入的数据非法时算法也可给出相应详细的反馈,给出一个对应的错误信息的值,方便排查与机器执行下一步操作。
(4)效率与低存储量需求 -
算法效率的度量
(1)事后统计
(2)事前分析估算
①算法策略②问题规模③程序语言级别越高速度越慢④编译程序代码质量⑤机器速度
时间复杂度 随问题规模n增大时算法执行时间的增长T(n)=O(f(n))
频度 执行次数
for(i=1;i<=n;++i)
for(j=1;j<=n;++j){
c[i][j]=0;
for(k=1;k<=n;++k)
c[i][j]+=a[j][k]*b[k][j];//*}
//带*算法频次为n³;时间复杂度为n³