#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 v1, ElemType v2, ElemType v3);
//构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2和v3的值
Status DestroyTriplet(Triplet& T);
//三元组T被销毁
Status Get(Triplet T, int i, ElemType& e);
//初始条件:三元组T已存在,1 <= i <= 3
//用e返回T的第i个的值
Status Put(Triplet& T, int i, ElemType e);
//初始条件:三元组T已存在,1 <= i <= 3
//操作结果:改变T的第i元的值为e
Status IsAscending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按升序排列,则返回1,否则返回0
Status IsDescending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按蒋旭排列,则返回1,否则返回0
Status Max(Triplet T, ElemType& e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最大值
Status Min(Triplet T, ElemType& e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最小值
//基本操作的实现
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3)
{
//构造三元组T,依次置T的三个元素的初值为v1,v2,v3
T = (ElemType*)malloc(3 * sizeof(ElemType));
if (!T)exit(OVERFLOW);//分配空间失败
T[0] = v1;
T[1] = v2;
T[2] = v3;
return OK;
}//InitTriplet
Status DestroyTriplet(Triplet& T)
{
//销毁三元组
free(T);
T = NULL;
return OK;
}//DestroyTriplet(
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的三个元素按升序排序,则返回1,否则返回0
return (T[0] <= T[1]) && (T[1] <= T[2]);
}//IsAscending
Status IsDescending(Triplet T)
{
// 如果T的三个元素按降序排序,则返回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 a;
ElemType a1,a2,a3;
printf("请输入三个元素的值:\n");
scanf("%d %d %d",&a1,&a2,&a3);
printf("%d 如果为1表示初始化执行成功\n",InitTriplet(a,a1,a2,a3));
printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
//步骤二
ElemType b;
printf("%d 如果为1表示取值执行成功\n",
Get(a,2,b));
printf("第二个值为 %d\n",b);
//步骤三
b=5;
printf("%d 如果为1表示更改值执行成功\n",Put(a,2,b));
printf("第二个值改为 %d\n",a[2-1]);
//步骤四
printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
printf("%d 如果为1表示元素按照升序排序,不升序排序输出0\n",IsAscending(a));
InitTriplet(a,a1,a2,a3);
printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
printf("%d 如果为1表示元素按照升序排序,不升序排序输出0\n",IsAscending(a));
//步骤五
printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
printf("%d 如果为1表示元素按照降序排序,不降序排序输出0\n",IsDescending(a));
InitTriplet(a,a3,a2,a1);
printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
printf("%d 如果为1表示元素按照降序排序,不降序排序输出0\n",IsDescending(a));
//步骤六
printf("%d 如果为1表示取得最大值\n",Max(a,b));
printf("输出最大值 %d\n",b);
//步骤七
printf("%d 如果为1表示取得最小值\n",Min(a,b));
printf("输出最小值 %d\n",b);
//步骤八
printf("%d 如果为1表示销毁本个三元组数据\n",DestroyTriplet(a));
return 0;
}
运行结果