1、首先截图说明文件布局
2、使用me.h对三元组的函数进行声明。
#ifndef _YE_LE_LE_
#define _YE_LE_LE_
typedef int *Triplet;
typedef int Status;
typedef int ElemType;
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3);//初始化三元组,返回初始化状态,成功为1,失败为0
Status DestoryTriplet(Triplet &T);//销毁三元组 ,返回成功的状态
Status Get(Triplet T, int i, ElemType &e); //得到其中的一个元素的值
Status Put(Triplet &T, int i, ElemType e);//修改其中一个元素的值
Status IsAsceding(Triplet T);//判断三元组是否为升序排列
Status IsDesceding(Triplet T); //判断三元组是否为降序排列
Status Max(Triplet T, ElemType &e);//返回三元组的最大值
Status Min(Triplet T, ElemType &e);//返回三元组的最小值
#endif
3、编写三元组的函数实现。
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
//定义指向三元组首地址的指针
typedef int *Triplet;
//返回值类型
typedef int Status;
//参数类型
typedef int ElemType;
//初始化三元组的实现
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3) {
T = (ElemType *)malloc(sizeof(ElemType) * 3);
if (!T)
{
exit(OVERFLOW);
}
T[0] = v1;
T[1] = v2;
T[2] = v3;
return OK;
}
//销毁三元组
Status DestoryTriplet(Triplet &T)
{
free(T);
T = NULL;
return OK;
}
//&e传递的是对实参的引用(别名)
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 IsAsceding(Triplet T)//因为在这里判断是否为升序,对T的内容没有影响,在形参中没有用引用
{
/*if (T[0]<=T[1]&&T[1]<=T[2])
{
return TRUE;
}
return FALSE;*/
return (T[0] <= T[1] && T[1] <= T[2]);
}
//判断三元组是否为降序排列
Status IsDesceding(Triplet T)
{
/*if (T[0] >= T[1] && T[1] >= T[2])
{
return TRUE;
}
return FALSE;*/
return (T[0] >= T[1] && T[1] >= T[2]);
}
//返回三元组的最大值
Status Max(Triplet T, ElemType &e)
{
int max = T[0]>T[1]?T[0]:T[1];
e = max > T[2] ? max : T[2];
return e;
}
//返回三元组的最小值
Status Min(Triplet T, ElemType &e)
{
int min = T[0]<T[1] ? T[0] : T[1];
e = min < T[2] ? min : T[2];
return e;
}
4、写出主函数对三元组实现进行测试。
#include<stdio.h>
#include<stdlib.h>
#include"me.h"
typedef int *Triplet;
typedef int Status;
typedef int ElemType;
int main()
{
Triplet T=NULL;
ElemType v1 = 4, v2 = 2, v3 = 3;
int i,e;
i = InitTriplet(T, v1, v2, v3);//初始化三元组,T是一个整形的地址
//输出三元组的初始化结果
printf("初始化完成的内容:\n");
for (i = 0; i<3; i++)
{
printf("%d\n", T[i]);
}
//销毁三元组
//i = DestoryTriplet(T);
//printf("%d\n",i);
//Get(T, 1, e);
//printf("%d\n",e);
printf("修改之后的内容:\n");
Put(T, 2, 10);
for (i = 0; i<3; i++)
{
printf("%d\n", T[i]);
}
//判断是否为升序排序,是返回1,否返回0
printf("判断是否为升序排序\n");
i=IsAsceding(T);
if (i==1)
{
printf("true\n");
}
else
{
printf("false\n");
}
printf("三元组中的最大值:\n");
i=Max(T, e);
printf("%d\n",i);
printf("三元组中的最小值:\n");
i = Min(T, e);
printf("%d\n", i);
return 0;
}