程序=数据结构+算法
- 数据结构的基本概念
- 基本的数据结构:线性结构。非线性结构
- 基本的数据处理技术:查找,排序
线性代数,概率论,程序设计语言,离散数学—>数据结构和算法—>数据库,操作原理,编译原理—>web信息处理,人工智能…
计算机解决问题的步骤
-
抽象为数据模型—>分析问题,提取操作对象,找出操作对象的关系,用数学语言描述这种关系(数据结构)
-
设计算法
-
编程,调试,运行
————————————————————————
计算机越来越多的被用于非数值计算——>操作算法:增删查改
操作对象间的关系:线性关系—>线性数据结构,线性表
非线性关系--->树(文件系统的目录结构)
图(地图求最短路径)
数据结构是一门研究非数值计算的程序设计中的计算机的操作对象以及他们之间关系和操作的学科
常见的术语
- 数据: 能够输入计算机并被处理的各种符号的集合(数值型,非数值型)
- 数据元素: 组成数据的基本单位,常作为一个整体进行考虑处理(元素,结点,顶点)
- 数据项: 构成数据元素的最小不可分割的单位
- 数据对象: 是性质相同的数据元素的集合
数据结构: 数据元素不是孤立存在的,它们之间存在某种关系,数据元素相互之间的关系称为结构,是指相互之间存在一种或多种特定关系的数据元素的集合
- 逻辑关系,逻辑结构
- 数据元素及其关系在计算机内存中的表示,物理结构,存储结构
- 数据的运算和实现,即对数据元素的操作以及在存储结构上的实现
存储结构是逻辑关系和元素本身的映像
逻辑结构是数据结构的抽象,存储结构是数据结构的实现
逻辑结构的种类
一: 线性结构:线性表,栈,队列,串(一个起点,终点,一个前趋,后继)
非线性结构:树,图(一个结点有多个前趋与后继)
二: 集合,线性,树,图
存储结构的种类
- 顺序存储结构:用一组连续的存储单元依次存储数据元素(数组)
- 链式存储结构:任意的存储单元存储数据元素(用指针来实现元素之间的逻辑关系)
- 索引存储结构:在储存结点信息的同时,还建立附加的索引表(index)
- 散列存储结构:根据结点的关键字
数据类型规定了取值范围,以及在范围上所允许的操作
抽象数据类型(ADT)
- 抽象出的数据模型
- 包括定义在数据模型上的一组抽象操作
抽象数据类型的形式定义(D,S,P)—>三元组表示 D:数据对象 S:D上的关系集 P:对D的基本操作集
定义格式:
ADT 抽象数据类型名{
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作:<基本操作的定义>
}ADT 抽象数据类型名
ps:1.数据对象和关系的定义使用伪代码描述
2.基本操作的定义格式为:
-
基本操作名(参数表) //1.赋值参数:只为操作提供输入值 2.引用参数:以&打头,除了提供值外, 还会返回结果
-
初始条件:<初始条件描述> //描述执行操作前的数据结构和参数应当满足的条件,若不满足则返回相应的错误信息。若初始条件为空则省略
-
操作结果:<操作结果的描述> //操作正常完成的话,数据结构的变化状况和应返回的结果
例子
ADT Circle{
数据对象:D={r,x,y|r,x,y均为实数}
数据关系:R={<r,x,y>|r是半径,<x,y>是圆心坐标}
基本操作:
Circle(&C,r,x,y)
操作结果:构造一个圆
double Area(C)
初始条件:圆以存在
操作结果:计算面积
double Circumference(C)
初始条件:圆已存在
操作结果:计算周长
}ADT Circle
ADT Complex{
D={r1,r2|r1,r2都是实数}
S={<r1,r2>|r1是实部,r2是虚部}
assign(&C,v1,v2)
初始条件:空的复数C已存在
操作条件:构造复数C,r1,r2,分别被赋予参数v1,v2的值
destory(&C)
初始条件:复数C已存在
操作结果:复数C被摧毁
}ADT Complex
本课程使用类c语言,1.使用已有的数据类型来定义他的存储结构
2.用函数定义他的操作
例子 typedef struct(
float realpart;
float imagpart;
}Complex
void assign(Complex*A,float real,float imag){
A->realpart=A.real;
A->imagpart=imag;
}