提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
数据类型是一组性质相同的值的集合以及定义于这个值集合上的一组操作的总称。例如,C语言中有六种基本数据类型(int,short,long,float,double,char),不同的数据类型定义的变量的取值范围及所执行的操作有所不同。而对于一些非数值抽象问题,使用基本数据类型往往难以解决,这时就需要使用抽象数据类型。
提示:以下是本篇文章正文内容,下面案例可供参考
一、概念
抽象数据类型(Abstract Date Type,简称 ADT):指从问题中抽象出来的一个数据模型以及定义在此数据模型上的一组操作,不考虑计算机的具体存储结构与运算的具体实现算法。
二、定义格式
抽象数据类型可用(D,S,P)三元组表示。其中,D是数据对象;S是D上的关系集;P是对D的基本操作集。
ADT 抽象数据类型名{
D: 数据对象:<数据对象的定义> //伪代码实现
S: 数据关系:<数据关系的定义> //伪代码实现
P: 基本操作: <基本操作的定义>
} 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)
初始条件:圆已存在
操作结果:计算面积
.....
} ADT Circle
三、具体实现
例如:求两复数和及差
#include<stdio.h>
typedef struct {
float realpart; //定义实部
float imagpart; //定义虚部
}Complex;
//构造复数
Complex assign(float real,float imag) {
Complex c;
c.realpart = real;
c.imagpart = imag;
return c;
}
//两复数求和
Complex add(Complex A,Complex B){
Complex c;
c.realpart = A.realpart + B.realpart;
c.imagpart = A.imagpart + B.imagpart;
return c;
}
//两复数求差
Complex minus(Complex A, Complex B) {
Complex c;
c.realpart = A.realpart - B.realpart;
c.imagpart = A.imagpart - B.imagpart;
return c;
}
int main()
{
Complex b,c,d,e;
b = assign(2.0, 4.0);
c = assign(1.0, 1.0);
d = add(b, c);
e = minus(b, c);
printf("c=%f+%f i\n", c.realpart, c.imagpart);
printf("b=%f+%f i\n", b.realpart, b.imagpart);
printf("d=%f+%f i\n", d.realpart, d.imagpart);
printf("d=%f+%f i\n", e.realpart, e.imagpart);
return 0;
}
总结
抽象数据类型使用可通过C语言的六种基本数据类型加以表示和实现。此外,抽象数据类型具有两个重要特性,即数据抽象和数据封装。抽象数据类型的定义仅取决于它的逻辑特性,而与其在计算机内部如何表示和实现无关。无论其内部结构如何变化,只要其数学特性不变就不影响其外观使用。