*资料整理来源:《数据结构(C语言版)》–严蔚敏、吴伟民编著
1.ADT描述
抽象数据类型(abstract data type,ADT)是指一个数学模型以及定义在该模型上的一组操作。
ADT 抽象数据类型名{
- 数据对象:<数据对象的定义>
- 数据关系:<数据关系的定义>
- 基本操作:<基本操作的定义>
}ADT 抽象数据类型名
其中,数据对象和数据关系的定义用伪代码描述,基本操作的定义格式为
基本操作名(参数表)
- 初始条件:<初始条件描述>
- 操作结果:<操作结果描述>
基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以&打头,除可提供输入值外,还将返回操作结果。
2.常用代码语句
(1)预定义常量和类型:
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//Status是函数的类型,其值是函数结果状态代码
typedef int Status
(2)数据结构的表示(存储结构)用类型定义(typedef)描述。数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义。
(3)基本操作的算法都用以下形式的函数描述:
函数类型 函数名(函数参数表){
//算法说明
语句序列
} //函数名
3.例子
抽象数据类型三元组Triplet的表示和实现
//采用动态分配的顺序存储结构
typedef ElemType *Triplet; //由InitTriplet分配3个元素存储空间
//基本操作的函数原型说明
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3);
//操作结果:构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2和v3的值
Status DestroyTriplet(Triplet &T);
//操作结果:三元组T被销毁
Status Get(Triplet T,int i,ElemType &e);
//初始条件:三元组T已存在,1<=i<=3
//操作结果:用e返回T的第i元的值
Status Put(Triplet &T,int i,ElemType e);
//初始条件:三元组T已存在,1<=i<=3
//操作结果:改变T的第i元的值为e
Status IsAscending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的3个元素按升序排列,则返回1,否则返回0
Status IsDescending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的3个元素按降序排列,则返回1,否则返回0
Status Max(Triplet T,ElemType &e);
//初始条件:三元组T已存在
//操作结果:用e返回T的3个元素中的最大值
Status Min(Triplet T,ElemType &e);
//初始条件:三元组T已存在
//操作结果:用e返回T的3个元素中的最小值
//基本操作的实现
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{
T=new ElemType[2]; //分配3个元素的存储空间
if(!T) exit(OVERFLOW); //分配存储空间失败
T[0]=v1;
T[1]=v2;
T[2]=v3;
return OK;
}
Status DestroyTriplet(Triplet &T)
{
delete []T;
T=NULL;
return OK;
}
Status Get(Triplet T,int i,ElemType &e)
{
if(i<1||i>3) return ERROR;
e=T[i-1];
return OK;
}
Status Put(Triplet &T,int i,ElemType e)
{
if(i<1||i>3) return ERROR;
T[i-1]=e;
return OK;
}
Status IsAscending(Triplet T)
{
return (T[0]<=T[1])&&(T[1]<=T[2]);
}
Status IsDescending(Triplet T)
{
return (T[0]>=T[1])&&(T[1]>=T[2]);
}
Status Max(Triplet T,ElemType &e)
{
e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2])
:((T[1]>=T[2])?T[1]:T[2]);
return OK;
}
Status Min(Triplet T,ElemType &e)
{
e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2])
:((T[1]<=T[2])?T[1]:T[2]);
return OK;
}
本文介绍了抽象数据类型(ADT),它包括数据对象、数据关系及一组基本操作。ADT的定义使用伪代码描述,基本操作分为赋值参数和引用参数。此外,讲解了如何用C语言的typedef来表示数据结构,并展示了如何通过函数实现ADT的基本操作。以三元组Triplet为例进行了具体阐述。
6412

被折叠的 条评论
为什么被折叠?



