赞
踩
三元组的实现
1、必要的头文件
2、相关操作集
3、主函数调用实现最终的功能
#include<malloc.h>
#include<math.h>//包含OVERFLOW=3
#include<stdlib.h>//包含exit函数
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
//经Hope.133发现,该例子中可不用定义SElemType类型
//20220922修改
//typedef int SElemType;
//20201001添加
typedef ElemType *Triplet;
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)
{
//传参列表为三元组指针,元素一、二、三
//通过malloc函数为三元组分配三个元素的空间
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)
{
//传参为三元组
free(T);
T=NULL;
return OK;
}
Status GetElem(Triplet T,int i,ElemType &e)
{
//传参为三元组,位置i和用来返回数值的参数e,这里的三元组不需要修改,传递实参
//判断是否输入正确
if(i<1||i>3)
return ERROR;
//正确则将i-1的值赋给e
else
e=T[i-1];
return OK;
}
Status Replace(Triplet &T,int i,ElemType e)
{
//传参为三元组,位置i和替换元素e
//判断i的位置是否为1-3
if(i<1||i>3)
return ERROR;
//将e的值付给三元组i-1的位置
else
T[i-1]=e;
return OK;
}
Status IsAscending(Triplet T)
{
//值只有三个,可以直接通过两两比较判断是否为升序
//若值有很多个,可通过for循环判断是否为升序
return (T[0]<=T[1]&&T[1]<T[2]);
}
Status IsDescending(Triplet T)
{
//方法同升序
return (T[0]>T[1]&&T[1]>T[2]);
}
Status Max(Triplet T,ElemType &e)
{
//传参为三元组,返回参数e
//直接通过判断语句返回最大值
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[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);
return OK;
}
int main() { //创建三元组对象T Triplet T; //构建元素m ElemType m; //执行函数完成的状态 Status i; //构建三元组 i=InitTriplet(T,0,0,0); printf("构造的三元组状态为%d,元素为%d,%d,%d\n",i,T[0],T[1],T[2]); system("pause"); //查询操作 int a; printf("请选择1-3来选择要查询的数\n"); scanf("%d",&a); i=GetElem(T,a,m); printf("查询状态%d,查询的数为%d\n",i,m); system("pause"); //循环修改操作 int isRound=1; while(isRound) { int n=-1; printf("请输入需要修改数的位置和修改后的值,用空格隔开\n"); scanf("%d %d",&n,&m); i=Replace(T,n,m); printf("修改状态为%d,修改后的三元组为%d,%d,%d\n",i,T[0],T[1],T[2]); printf("继续修改请按1,退出修改按0\n"); scanf("%d",&isRound); } //判断三元组是否为升序 i=IsAscending(T); printf("三元组为升序的状态为%d,(0为否,1为是)\n",i); system("pause"); //判断三元组是否为降序 i=IsDescending(T); printf("三元组为降序的状态为%d,(0为否,1为是)\n",i); system("pause"); //最大值 i=Max(T,m); printf("函数执行状态为%d,最大值为%d\n",i,m); system("pause"); //最小值 i=Min(T,m); printf("函数执行状态为%d,最小值为%d\n",i,m); system("pause"); return 0; }
执行结果如图
PS:经过网友指正,缺少一个Triplet的声明,在原文已添加。
总结:三元组的实现需要注意传参问题,实参与形参的知识点一定要牢记。附源代码一份(https://download.csdn.net/download/qq_37002607/11387345)
(https://github.com/idong1e/DataStruct)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。