数据结构(一) 抽象数据类型的表示与实现 代码示例

来源:互联网 发布:淘宝整点秒杀怎么设置 编辑:程序博客网 时间:2024/05/01 04:45

抽象数据类型三元组Triplet的表示和实现

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

#defined   OVERFLOW  0;

#defined   OK  1;

#defined   ERROR  1;

typedef      ElemType      *Triplet;

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

Status InitTriplet(Triplet &T, ElemType v1,ElemType v1ElemType 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&TElemType v1,ElemType v1ElemType 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+1])

{

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 v1ElemType 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){

int k;

k=0;

if(i<1||i>3)

return ERROR;

for(k=i-1;k<4;k++)

{

T[k+1]=T[k];

}

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){}




1 0
原创粉丝点击