/*_############################################################################
_##
_## 严蔚敏版数据结构->第一章 程序
_## Author: xwlee
_## Time: 2007.09.16
_## Chang'an University
_## Development condition: win2003 Server+VC6.0 (使用了C/C++语法)
_##
_## http://csdn.net/Micro_lee
_##
_## 数据结构程序测试--抽象数据类型Triplet
_##########################################################################*/
#include <stdlib.h>
#include <stdio.h>
//函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status; //定义函数返回类型
typedef int ElemType; //定义数组元素类型,具体情况要自己定义
typedef ElemType *Triplet;
//基本操作的实现
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;
}
int main()
{
Triplet p;
ElemType x,y,z;
int i,e, my_max, my_min;
printf("Please enter v1,v2,v3:");
scanf("%d %d %d", &x, &y, &z );
if( InitTriplet( p, x, y, z) != OK )
printf("Init is error!/n");
for( i=1; i<4; i++ )
{
Get( p, i, e);
printf("Get(%d)=%d/n", i, e);
}
Put( p, 1, 100);
Put( p, 2, 200);
Put( p, 3, 300);
for( i=1; i<4; i++ )
{
Get( p, i, e);
printf("Get(%d)=%d/n", i, e);
}
Max( p, my_max );
Min( p, my_min );
printf("/nIsAscending=%d/nIsDescending=%d/nMax=%d/nMin=%d/n/n", IsAscending(p), IsDescending(p), my_max, my_min );
DestroyTriplet( p );
return 0;
}