数据结构之三元组的操作

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define INFEASIBLE -1


#define ElemType int
typedef int Status;
typedef ElemType *Triplet;


Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{//构造了三元组T,元素e1,e2和e3的值分别被赋以参数v1,v2,v3的值。
T=(ElemType *)malloc(3*sizeof(ElemType));
if(!T)
exit (OVERFLOW);
T[0]=v1;
T[1]=v2;
T[2]=v3;
return OK;
}
Status DestroyTriplet(Triplet &T)
{//三元组T被销毁。
free(T);
T=NULL;
return OK;
}
Status Get(Triplet &T,int i,ElemType &e)
{ //用e返回T的第i元的值
if(i<1||i>3)
return ERROR;
e=T[i-1];
return OK;
}
Status Put(Triplet &T,int i,ElemType e)
{//改变T的第i元的值为e。
if(i<1||i>3)
return ERROR;
T[i-1]=e;
return OK;
}
Status IsAscending(Triplet T)
{ //如果三元组T的3个元素按升序排列,则返回1,否则返回0。
return (T[0]<=T[1]&&T[1]<=T[2]);
}
Status Isdescending(Triplet T)
{//如果三元组T的3个元素按降序排列,则返回1,否则返回0。
return (T[0]>=T[1]&&T[1]>=T[2]);
}
Status Max(Triplet T,ElemType &e)
{//用e返回T的3个元素中的最大值。
e=(T[0]>=T[1])? ((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]);
return OK;
}
Status Min(Triplet T,ElemType &e)
{//用e返回T的3个元素中的最小值。
e=(T[0]<=T[1])? ((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);
return OK;
}
int main()
{
Triplet T;  //定义一个三元组
ElemType e;
int i,a,b,c;
scanf("%d%d%d",&a,&b,&c);
InitTriplet(T,a,b,c);
  //for(i=0;i<3;i++)
//{Get(T,i,a);
printf("你所录入的值为:");
Get(T,1,a);
printf("%d ",a);
Get(T,2,b);
printf("%d ",b);
Get(T,3,c);
printf("%d \n",c);
//}
int m;
int t;
printf("请输入要改变的值的位置:");
scanf("%d",&t);
printf("你所修改后的值:");
scanf("%d",&m);
Put(T,t,m);
printf("修改后的三元组为:");
for(i=0;i<3;i++)
{
printf("%d ",T[i]);
}
printf("\n");
if(IsAscending(T))
printf("该三元组为升序!");
else if(Isdescending(T))
printf("该三元组为降序!");
else
printf("该三元组为无序!");
printf("\n");
Max(T, e);  
    printf("该三元组的最大值: %d\n", e);  
    Min(T, e);  
    printf("该三元组的最小值: %d\n", e); 
return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值