#include<stdio.h>
#include<stdlib.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 a, ElemType b, ElemType c);
Status destoryTriplet(Triplet &T);
Status get(Triplet T,int index,ElemType &e);
Status put(Triplet &T,int index,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 a, ElemType b, ElemType c)
{
T=(ElemType*)malloc(3*sizeof(ElemType));
if(!T)
exit(INFEASIBLE);
T[0]=a;
T[1]=b;
T[2]=c;
return OK;
}
Status destoryTriplet(Triplet &T)
{
free(T);
T=NULL;
return OK;
}
Status get(Triplet T,int index,ElemType &e)
{
if(index<1 || index>3)
return ERROR;
e=T[index-1];
return OK;
}
Status put(Triplet &T,int index,ElemType e)
{
if(index<1 || index>3)
return ERROR;
T[index-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()
{ int e=3,f=4,g=0;
Triplet t;
initTriplet(t,8,9,10);
get(t,1,e);
put(t,2,f);
g=isAscending(t);
printf("是否升序 %d\n",g);
g=isDescending(t);
printf("是否降序 %d\n",g);
Max(t,g);
printf("MAX=%d\n",g);
Min(t,g);
printf("MIN=%d\n",g);
destoryTriplet(t);
}