抽象数据类型三元组Triplet的表示和实现
//-------------------------采用动态分配的顺序存储结构----------------------------------
#defined OVERFLOW 0;
#defined OK 1;
#defined ERROR 1;
typedef ElemType *Triplet;
//-------------------------基本操作的函数原型说明-----------------------------------------
Status InitTriplet(Triplet &T, ElemType v1,ElemType v1, ElemType v1); //初始条件:三个ElemType 类型的元素 操作结果:构造一个ElemType 类型的三元组
Status DestroyTriplet (Triplet &T);//初始条件:三元组存在 操作结果:三元组被销毁
Status Get(Triplet T,int i, ElemType &e); //初始条件:三元组存在 操作结果:取出存在于第i个位置的元素
Status Put(Triplet &T,int i, ElemType e);//初始条件:三元组存在 操作结果:在第i个位置存入值为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 v1, ElemType v1){
T=malloc(3*sizeof(ElemType));
T[1]=v1;
T[2]=v2;
T[3]=v3;
return T;
}
Status DestroyTriplet (Triplet &T){
free(T);
}
Status Get(Triplet T,int i, ElemType &e){
e=T[i-1];
return OK;
}
Status Put(Triplet &T,int i, ElemType e){
int k;
k=0;
if(i<1||i>4)
return ERROR;
for(k=i-1;k<4;k++)
{
T[k+1]=T[k];
}
T[i-1]=e;
return OK;
}
ps:
未考虑增加了一个内存空间,应该如何分配内存空间。是给T重新分配4个存储空间,还是再分配一个存储空间存T中第4个元素。
Status IsAscending(Triplet T){
int i;
i=0;
int *p;
for(i=0;i<3;i++)
{
p=T[I];
if(T[i]>T[i+1])
{
T[i]=[i+1];
T[i+1]=&p;
}
}
return OK;
}
Status IsDescending(Triplet T){
int i;
i=0;
int *p;
for(i=0;i<3;i++)
{
p=T[I];
if(T[i] { T[i]=[i+1]; T[i+1]=&p; } } return OK; } Status Max(Triplet T,ElemType &e){
int i; i=0; int *p; p=0; for(i=0;i<3;i++) { if(T[i]>&p) { p=T[I]; } } return OK; Status Min(Triplet T,ElemType &e){
int i; i=0; int *p; p=0; for(i=0;i<3;i++) { if(T[i]<&p) { p=T[I]; } } return OK; //------------------------------书上的代码------------------------------------------------------- Status InitTriplet(Triplet &T, ElemType v1,ElemType v1, ElemType v1){ T=(ElemType *)malloc(3*sizeof(ElemType)); if(!T) exit(OVERFLOW); T[1]=v1; T[2]=v2; T[3]=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; } ps: 顺序存储的存储结构,存储大小不可变。当给数组中插入新的元素时,不用将挪动数组中的其他元素,只要覆盖掉想要插入位置的元素就好了。 Status ascending(Triplet T){} Status descending(Triplet T){} Status Max(Triplet T,ElemType &e){} Status Min(Triplet T,ElemType &e){}
int k;k=0;for(k=i-1;k<4;k++){T[k+1]=T[k];}