1.基本操作的函数原型说明
Status InitTriplet(Triplet T, ElemType v1, ElemType v2, ElemType v3);
//操作结果:构造三元组T,元素e1,e2,e3分别被赋予v1,v2,v3的值
void DestroyTriplet(Triplet T);
//操作结果:三元组T被销毁
void Get(Triplet T, int i, ElemType *e);
//用e返回T的第i个值
void Put(Triplet T, int i, ElemType *e);
//改变T第i个元素为e
void IsAscending(Triplet T);
//判断是否是升序排列,返回1,否则返回0
void IsDescending(Triplet T);
//判断是否是降序排列,返回1,否则返回0
void Max(Triplet T, ElemType *e);
//用e返回T中的的最大值
void Min(Triplet T, ElemType *e);
2.构造三元组
Status InitTriplet(Triplet T, ElemType v1, ElemType v2, ElemType v3)
{
T = (ElemType*)malloc(3 * sizeof(ElemType));
if (!T)
exit(OVERFLOW);
*T = v1;
*(T+1) = v2;
*(T+2) = v3;
return T;
}
3.在三元组查找第i个元素值
void Get(Triplet T, int i, ElemType *e)
{
if (i < 1 || i>3)
printf("查找失败\n");
*e = *(T+i-1);
printf("T的第%d个元素是:%d\n", i, *e);
}
4.销毁三元组
void DestroyTriplet(Triplet T)
{
free(T);
T = NULL;
printf("已销毁三元组\n");
}
5.替换三元组中的第i个数值
void Put(Triplet T, int i, ElemType *e)
{
if (i < 1 || i>3)
printf("替换失败\n");
*(T + i - 1) = *e;
printf("替换后三元组元素:\n*T=%d\n*(T+1)=%d\n*(T+2)=%d\n", *T, *(T + 1), *(T + 2));
}
6.判断升降序
void IsAscending(Triplet T)
{
if ((T[0] <= T[1]) && (T[1] <= T[2]))
printf("三元组升序排列\n");
else
printf("三元组不是程序排列\n");
}
//判断是否降序排列
void IsDescending(Triplet T)
{
if ((T[0] >= T[1]) && (T[1] >= T[2]))
printf("三元组是降序排列\n");
else
printf("三元组不是降序排列\n");
}
7.查找最大、最小值
//用e返回最大值
void 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]);
printf("T中最大元素是%d\n", *e);
}
//用e返回最小值
void 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]);
printf("T中最小元素是%d\n", *e);
}
8.所有代码
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2 //堆栈上溢
typedef int ElemType;
typedef ElemType* Triplet;
typedef Triplet Status;
//=====================基本操作的函数原型说明=====================
Status InitTriplet(Triplet T, ElemType v1, ElemType v2, ElemType v3);
//操作结果:构造三元组T,元素e1,e2,e3分别被赋予v1,v2,v3的值
void DestroyTriplet(Triplet T);
//操作结果:三元组T被销毁
void Get(Triplet T, int i, ElemType *e);
//用e返回T的第i个值
void Put(Triplet T, int i, ElemType *e);
//改变T第i个元素为e
void IsAscending(Triplet T);
//判断是否是升序排列,返回1,否则返回0
void IsDescending(Triplet T);
//判断是否是降序排列,返回1,否则返回0
void Max(Triplet T, ElemType *e);
//用e返回T中的的最大值
void Min(Triplet T, ElemType *e);
//=====================基本操作的实现======================
//构造三元组T,元素e1,e2,e3分别被赋予v1,v2,v3的值
Status InitTriplet(Triplet T, ElemType v1, ElemType v2, ElemType v3)
{
T = (ElemType*)malloc(3 * sizeof(ElemType));
if (!T)
exit(OVERFLOW);
*T = v1;
*(T+1) = v2;
*(T+2) = v3;
return T;
}
//销毁三元组T
void DestroyTriplet(Triplet T)
{
free(T);
T = NULL;
printf("已销毁三元组\n");
}
//用e返回T的第i元的值
void Get(Triplet T, int i, ElemType *e)
{
if (i < 1 || i>3)
printf("查找失败\n");
*e = *(T+i-1);
printf("T的第%d个元素是:%d\n", i, *e);
}
//用e替换T第i元的值
void Put(Triplet T, int i, ElemType *e)
{
if (i < 1 || i>3)
printf("替换失败\n");
*(T + i - 1) = *e;
printf("替换后三元组元素:\n*T=%d\n*(T+1)=%d\n*(T+2)=%d\n", *T, *(T + 1), *(T + 2));
}
//判断是否升序排列
void IsAscending(Triplet T)
{
if ((T[0] <= T[1]) && (T[1] <= T[2]))
printf("三元组升序排列\n");
else
printf("三元组不是程序排列\n");
}
//判断是否降序排列
void IsDescending(Triplet T)
{
if ((T[0] >= T[1]) && (T[1] >= T[2]))
printf("三元组是降序排列\n");
else
printf("三元组不是降序排列\n");
}
//用e返回最大值
void 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]);
printf("T中最大元素是%d\n", *e);
}
//用e返回最小值
void 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]);
printf("T中最小元素是%d\n", *e);
}
int main()
{
Triplet T;
ElemType a = 2, b = 4, c = 6;
int get_x = 2;
int put_x = 3;
ElemType* e;
T = (ElemType*)malloc(3 * sizeof(ElemType));
e = (ElemType*)malloc(sizeof(ElemType));
T = InitTriplet(T, a, b, c);
printf("*T=%d\n*(T+1)=%d\n*(T+2)=%d\n", *T, *(T + 1), *(T + 2));
Get(T, get_x, e);
Put(T, put_x, e);
IsAscending(T);
IsDescending(T);
Min(T, e);
Max(T, e);
DestroyTriplet(T);
return 0;
}
9.代码运行结果