抽象数据类型三元组的表示和实现(C语言)

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.代码运行结果

 

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱姝姝的逆袭日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值