Triplet.c:
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
//----------采用动态分配的顺序存储结构---------
typedef ElemType *Triplet;//由InitTriplet分配3个元素存储空间
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{
//构造三元组T,依次置T的3个元素的初值为v1,v2和v3。
T=(ElemType*)malloc(3*sizeof(ElemType));//分配3个元素的存储空间
if(!T)exit(OVERFLOW); //分配存储空间失败
T[0]=v1; T[1]=v2; T[2]=v3;
return OK;
} //InitTriplet
Status DestoryTriplet(Triplet &T)
{
//销毁三元组T。
free(T);T=NULL;
return OK;
} //DestoryTriplet
Status Get(Triplet T,int i,ElemType &e)
{
//1<=i<=3,用e返回T的第i元的值。
if(i<1||i>3)return ERROR;
e=T[i-1];
return OK;
} //Get
Status Put(Triplet &T,int i,ElemType e)
{
//1<=i<=3,置T的第i元的值为e。
if(i<1||i>3)return ERROR;
T[i-1]=e;
return OK;
} //Put
Status IsAscending(Triplet T)
{
//如果T的3个元素按升序排列,则返回1,否则返回0。
return (T[0]<=T[1])&&(T[1]<=T[2]);
} //IsAscending
Status IsDescending(Triplet T)
{
//如果T的3个元素按降序排列,则返回1,否则返回0。
return (T[0]>=T[1])&&(T[1]>=T[2]);
} //IsDescending
Status Max(Triplet T,ElemType &e)
{
//用e返回指向T的最大元素的值。
e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]);
return OK;
} //Max
Status Min(Triplet T,ElemType &e)
{
//用e返回指向T的最小元素的值。
e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);
return OK;
} //Min
int main(){
Triplet T;
ElemType e,e1,e2,e3;
e1=3;e2=5;e3=7;
// e1=7;e2=3;e3=5;
// e1=7;e2=5;e3=3;
InitTriplet(T,e1,e2,e3);
printf("IsAscending=%d\n",IsAscending(T));
printf("IsDescending=%d\n",IsDescending(T));
Max(T,e);printf("Max=%d\n",e);
Min(T,e);printf("Min=%d\n",e);
Get(T,2,e);printf("e2=%d\n",e);
e=1;Put(T,2,e);printf("e2=%d\n",e);
DestoryTriplet(T);
return 0;
}
参考书籍:数据结构C语言版-严蔚敏