基本概念:
- 数据:数值型和非数值型。
- 数据元素:是数据的基本单位。
- 数据项:构成数据元素的最小单位。
数据>数据元素>数据项。
- 数据对象:性质相同的数据元素的集合。
- 数据结构:数据元素相互之间的关系。
逻辑结构:
- 线性结构:有且仅有一个开始和一个终端结点,并且所有结点最多只有一个直接前趋和一个直接后继。
- 非线性结构:一个结点可能有多个直接前趋和直接后继。
存储结构:
- 顺序存储结构。
- 链式存储结构(指针)。
抽象数据类型的表示与实现
例:关于圆的函数
ADT Complex{ 数据对象:D={r1,r2|r1,r2都是实数} 数据关系:S={<r1,r2>|r1是实部,r2是虚部} 基本操作: assign(&C,v1,v2) 初始条件:空的复数C已存在 操作结果:构造复数C,r1,r2分别被赋以参数v1,v2的值 add(Complex *C,Complex *A,Complex *B) 初始条件:复数A,B已存在 操作结果:复数A,B被相加,返回复数C …… }ADT Complex
将上面的抽象类型定义转化为C语言形式
/*定义数据类型*/ typedef struct{ float realpart;//实部 float imagpart;//虚部 }Complex //定义复数抽象类型 /*函数声明*/ void assign(Complex *A,float real,float imag);//赋值 void add(Complex *C,Complex A,Complex B);//销毁 /*具体的构造函数*/ void assign(Complex *A,float real,float imag) { A->realpart=real;//实部赋值 A->imagpart=imag;//虚部赋值 } void add(Complex *C,Complex A,Complex B C->realpart=A.realpart+B.realpart;//实部相加 C->imagpart=A.imagpart+B.imagpart;//虚部相加 }
实例演示
例:求复数 8+6i 和 4+3i 的和以及他们的积?PS:除法运算规则太难
/* 运行结果: add:12.0+9.0i multiply:14.0+48.0i */ #include<stdio.h> typedef struct { float realpart;//实部 float imagpart;//虚部 }Complex; void assign(Complex* C, float real, float imag); void add(Complex* C, Complex A, Complex B); void multiply(Complex* C, Complex A, Complex B); float Getreal(Complex C); float Getimag(Complex C); int main() { Complex C, C1, C2, D1, D2; float Real = 0, Imag = 0; assign(&C1, 8.0, 6.0); assign(&C2, 4.0, 3.0); add(&D1, C1, C2); Real=Getreal(D1); Imag=Getimag(D1); printf("add:%.1lf+%.1lfi\n", Real, Imag); multiply(&D2, C1, C2); Real = Getreal(D2); Imag = Getimag(D2); printf("multiply:%.1lf+%.1lfi\n", Real, Imag); return 0; } void assign(Complex* C, float real, float imag) { C->realpart = real; C->imagpart = imag; } void add(Complex* C, Complex A, Complex B) { C->realpart = A.realpart + B.realpart; C->imagpart = A.imagpart + B.imagpart; } void multiply(Complex* C, Complex A, Complex B) { C->realpart = A.realpart * B.realpart - A.imagpart * B.imagpart; C->imagpart = A.imagpart * B.realpart + A.realpart * B.imagpart; } float Getreal(Complex C) { return C.realpart; } float Getimag(Complex C) { return C.imagpart; }
运行结果:
算法特性
有穷性、确定性、可行性、输入、输出;