程序设计实验———三元组的实现
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef int ElemType;
typedef ElemType *Triplet;
//定义三元组
int Initriplet(Triplet *T,ElemType v1, ElemType v2,ElemType v3)
{
*T = (ElemType *)malloc(3 * sizeof(ElemType));
if(!*T)
exit(0);
(*T)[0] = v1;
(*T)[1] = v2;
(*T)[2] = v3;
return 1;
}
//销毁三元组
int DestoryTriplet(Triplet *T)
{
free(*T);
*T = NULL;
return 1;
}
//替换三元组
int Put(Triplet *T,int i,ElemType e)
{
if(i<1||i>3)
return 0;
(*T)[i-1] = e;
return 1;
}
//找出最大值
int Max(Triplet T,ElemType *e)
{
if(T[0]>=T[1]){
*e = T[0];
}else{
*e = T[1];
}
if(*e>=T[2]){
*e=*e;
}else{
*e = T[2];
}
return 1;
}
//找出最小值
int Min(Triplet T,ElemType *e)
{
if(T[0]<=T[1]){
*e = T[0];
}else{
*e = T[1];
}
if(*e<=T[2]){
*e = *e;
}else{
*e = T[2];
}
return 1;
}
//返回第i个数据的地址
int Get(Triplet T,int i,ElemType *e)
{
if(i<1||i>3)
return 0;
*e = T[i-1];
return 1;
}
//显示三元组
int Printf(Triplet T)
{
printf("三元组的三个值分别为:%d %d %d\n",T[0],T[1],T[2]);
return 1;
}
int main(int argc, char *argv[]) {
Triplet T;
ElemType m;
int i,a,b,v1,v2,v3;
printf(" ############--目录--############ \n");
printf(" | | \n");
printf(" | 1. 初始化三元组 |\n");
printf(" | 2. 显示三元组的值 |\n");
printf(" | 3. 取第i个位置的地值 |\n");
printf(" | 4. 替换第i个地址的值 |\n");
printf(" | 5. 找到最大值 |\n");
printf(" | 6. 找到最小值 |\n");
printf(" | 7. 销毁三元组 |\n");
printf(" | 8. 退出程序 |\n");
printf(" | |\n");
printf(" ############--------############ \n");
printf("请输入您选择的功能序号:\n");
while(scanf("%d",&a)!=EOF ){
switch(a)
{
case 1:{
printf("初始化三元组,请输入三元组的三个值!\n");
scanf("%d%d%d",&v1,&v2,&v3);
i = Initriplet(&T,v1,v2,v3);
if(i){
printf("调用初始化三元组成功\n");
}else{
printf("调用初始化三元组成功\n");
}
};break;
case 2:{
Printf(T);
};break;
case 3:{
printf("请输入取第i个位置的值\n");
scanf("%d",&a);
i = Get(T, a, &m);
printf("T的第%d个位置的值为:%d\n",a,m);
};break;
case 4:{
printf("请输入您要替换的三元组位置");
scanf("%d",&a);
if(a>=1&&a<=3){
printf("请输入您要替换的三元组值");
scanf("%d",&b);
i = Put(&T, a, b);
if(1==i)
printf("将第%d个值改为%d后,三元组的值为:%d %d %d\n",a,b,T[0],T[1],T[2]);
else
printf("########## 替换失败! ##########\n");
}
else{
printf("########## 失败! 请输入正确的位置##########\n");
}
} ;break;
case 5:{
i = Max(T,&m);
if(i==1)
printf("三元组中的最大值为:%d\n",m);
};break;
case 6:{
i = Min(T,&m);
if(i==1)
printf("三元组中的最小值为: %d\n",m);i = Min(T,&m);
};break;
case 7:{
DestoryTriplet(&T);
printf("销毁后T==%u(NULL)\n",T);
} ;break;
case 8:{
return 0;
}
}
printf("\n");
printf("请输入您选择的功能序号:\n");
}
system ("PAUSE");
return 0;
}