1.3 抽象数据类型表示和实现

抽象数据类型(abstract data type 简称ADT):

是指一个数据模型及其定义在该数据模型上的一组操作。

和数据结构的形式定义相对应,抽象数据类型可用以下三元组表示:

(D,S,P)

其中,D是数据对象,S是D上的关系集,P是对D的基本操作集。一般抽象数据类型定义的格式:

ADT 抽象数据类型名{

数据对象:<数据对象的定义>

数据关系:<数据关系的定义>

基本操作:<基本操作的定义>

}ADT 抽象数据类型名


在形参表中,以&打头的参数即为引用参数。

例:1-6 抽象数据类型三元组的定义;

ADT Triplet{

数据对象:D={e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合)}

数据关系:R1={<e1,e2>,<e2,e3>}

基本操作:

   InitTriplet(&T,v1,v2,v3)

操作结果:构造了三元组T,元素e1,e2,e3,分别被赋值为v1,v2,v3的值。

 DestroyTriplet(&T)

操作结果:三元组T被销毁。

Get(T,i,&e)

操作结果:用e返回T的第i元的值。

Put(&T,i,e)

操作结果:改变T的第i元的值为e。

IsAscending(T)

操作结果:如果T的三个元素按升序排列,则返回1,否则返回0。

IsDescending(T)

操作结果:如果T的三个元素按降序排列,则返回1,否则返回0。

Max(T,&e)

操作结果:用e返回T中元素的最大值。

Min(T,&e)

操作结果:用e返回T中元素的最小值。

}ADT Triplet

例1-7 抽象数据类型Triplet的表示与实现:

预定义常量和类型

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

//Status是函数类型,其值是函数结构状态代码

typedef int Status;


//------------------采用动态分配的顺序存储结构-------------------------------------------

typedef ElemType *Triplet;//有InitTriplet分配3个元素的存储空间;

//-----------------基本操作的函数原型说明-------------------------------------------------

Status InitTriplet(Triplet &T,ElemType v1, ElemType v2, ElemType v3);

Status DestroyTriplet(Triplet &t);

Status Get(Triplet T, int i, ElemType &e);

Status Put(Triplet &t, int i, ElemType e);

   Status IsAscending(Triplet T);

Status IsDescending(Triplet T);

Status Max(Triplet T, ElemType &e);

Status Min(Triplet T, ElemType &e);


//--------------------------基本操作实现---------------------------------------------------

Status InitTriplet(Triplet &T,ElemType v1, ElemType v2, ElemType v3)

{

T = (ElemType *)malloc(3*sizeof(ElemType));

if(!T)exit(OVERFLOW);

T[0] = v1; T[1] = v2; T[2] = v3;

return OK;

}

Status DestroyTriplet(Triplet &T)

{

free(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;

}
























评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值