数据结构--抽象数据类型(ADT)的表示与实现

*资料整理来源:《数据结构(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已存在
    //操作结果:如果T3个元素按升序排列,则返回1,否则返回0
Status IsDescending(Triplet T);
    //初始条件:三元组T已存在
    //操作结果:如果T3个元素按降序排列,则返回1,否则返回0
Status Max(Triplet T,ElemType &e);
    //初始条件:三元组T已存在
    //操作结果:用e返回T3个元素中的最大值
Status Min(Triplet T,ElemType &e);
    //初始条件:三元组T已存在
    //操作结果:用e返回T3个元素中的最小值

//基本操作的实现
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;
}

你可能感兴趣的:(数据结构与算法)