提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
数据结构
绪论
数据结构研究(非数值计算)
1.管理系统
操作对象:若干条数据记录
操作算法:查询、插入、修改、删除等
对象之间关系:线性关系
数据结构:线性数据结构、线性表
2.棋局、文件系统
操作对象:棋局状态
算法:选择一种策略使棋局状态发生变化
对象之间关系:非线性、树
3.地图最短路径
图,网状结构
基本术语
数据
数据元素
数据项
数据》数据元素》数据项
数据对象
性质相同的数据元素的集合
数据结构
数据元素之间的关系
包括:
1. 逻辑结构(数据结构的抽象)
2. 数据元素极其关系在内存中的表示(映像)物理结构或存储结构(数据结构的实现)
3. 数据的运算或实现
逻辑结构种类:
1. 线性(只有一个开始及终端)/非线性(非1v1)
2. 四种:集合,线性,树形,图状
存储结构:
1. 顺序存储结构,连续的存储单位依次存储(数组)
2. 链接存储结构,任意的存储单位(指针)
3. 索引存储结构,存储同时建立附加索引表
4. 散点存储结构,根据结点关键字计算
数据类型与抽象数据类型
数据类型作用:约束取值范围,约束操作
抽象数据类型(ADT):一个数据模型以及定义数学模型上操作
- 逻辑结构
- 抽象运算(相关操作)
- 不考虑计算机内具体存储结构与运算的具体实现算法
形式定义:(DSP)
D:数据对象
S:D上的关系集
P:对D的基本操作集
ADT 类型名{
数据对象:<>
数据关系:<>
基本操作:<>
}ADT 类型名
基本操作:参数表(引用参数用&打头),初始条件,操作结果
举例
抽象数据类型的表示与实现
类C语言(介于伪码与C语言)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include<stdbool.h>
typedef struct{
float realpart;
float imaqpart;
}Complex;
void assign(Complex *A, float real, float imag){
A->realpart = real;
A->imaqpart = imag;
}
void add(Complex *c,Complex a,Complex b){
c->realpart = a.realpart+b.realpart;
c->imaqpart = a.imaqpart+b.imaqpart;
}
void multipy(Complex *c,Complex a,Complex b){
c->realpart = a.realpart*b.realpart-a.imaqpart*b.imaqpart;
c->imaqpart = a.realpart*b.imaqpart+a.imaqpart*b.realpart;
}
bool divide(Complex *c,Complex a,Complex b){
float k = pow(b.realpart,2)+pow(b.imaqpart,2);
if (k!=0){
Complex b_p,c_p;
b_p.realpart = b.realpart;
b_p.imaqpart=-b.imaqpart;
multipy(&c_p,a,b_p);
c->realpart =c_p.realpart /k;
c->imaqpart = c_p.imaqpart/k;
return true;
}
else{
return false;
}
}
int main()
{
Complex C,a,z1,z2,z3;
assign(&C,8.0,6.0);
assign(&a,4.0,3.0);
add(&z1,a,C);
printf("%f +i%f",z1.realpart,z1.imaqpart);
multipy(&z2,a,C);
printf("%f +i%f",z2.realpart,z2.imaqpart);
if(divide(&z3,z2,z1)){
printf("%f +i%f",z3.realpart,z3.imaqpart);
}
return 0;
}