基本概念和术语(3)
数据类型
在使用高级程序设计语言编写程序时,必须对程序中的每个变量、常量或表达式,明确说明他们所属的数据类型 。
例如,C语言中:
- 提供int,char,float,double等基本数据类型
- 数组、结构、共用体、枚举等构造数据类型
- 还有指针、空(void)类型
- 用户也可以用typedef自己定义数据类型
数据类型的作用:
- 约束变量或常量的取值范围
- 约束变量或常量的操作
抽象数据类型(ADT)
定义
ADT是指数学模型以及定义在此数学模型上的一组操作 。
- 由用户定义,从问题抽象出数据模型(逻辑结构)
- 还包括定义在数据模型上的一组抽象运算(相关操作)
- 不考虑计算机内的具体存储结构与运算的具体实现算法
格式
抽象数据类型的格式:
ADT 抽象数据类型
{
- 数据类型:<数据对象的定义>
- 数据关系:<数据关系的定义>
- 基本操作:<基本操作的定义>
} ADT 抽象数据类型名
期中:
数据对象、数据关系的定义用的是伪代码描述
基本操作的定义格式为
- 基本操作名(参数表)
- 初始条件:<初始条件的描述>
- 操作结果:<操作结果描述>
参数表:
- 赋值参数只为操作提供输入值。
- 引用参数以&打头,除可提供输入值外,还将返回操作结果。
初始条件:
- 描述操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。若初始条件为空,则省略之。
操作结果:
- 说明操作正常完成之后,数据结构的变化状况和应放回的结果。
ADT抽象数据类型名{
- Data
- 数据对象的定义
- 数据元素之间逻辑关系的定义
- Operation
- 操作1 初始条件 操作结果描述
- 操作2
- 操作n …
} ADT抽象数据类型名
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
抽象数据类型示例
下面写一个关于复数的抽象数据类型:
#include <stdio.h>
#include<string.h>
typedef struct
{
float realpart;//实部
float imagpart;//虚部
} Complex;
void assign(Complex *A,float real,float imag);//赋值
void add(Complex *A,Complex B,Complex C);//A+B
void minus(Complex *A,Complex B,Complex C);//A-B
void multiply(Complex *A,float real,float imag);//A*B
void divide(Complex *A,float real,float imag);//A/B
void assign(Complex *A,float real,float imag)
{
A->imagpart=imag;
A->realpart=real;
}
void add(Complex *c,Complex A,Complex B)
{
c->realpart=A.realpart+B.realpart;
c->imagpart=A.imagpart+B.imagpart;
}
int main() {
Complex z1,z2,z3,z4,z;
float RealPart = 1.0, ImagPart=1.0;
assign(&z1,6.0,8.0);
assign(&z2,4.0,3.0);
add(&z,z1,z2);
printf("%lf+%lfi",z.realpart,z.imagpart);
}