抽象数据类型的表示和实现实验

本文介绍了如何设计和实现一个动态内存的抽象数据类型——三元组,包括创建、取分量、置分量、求最大分量、求最小分量、显示以及销毁等基础操作,以及选作内容中对三元组对应分量的相加、相减和同乘操作的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本要求:

   设计实现抽象数据类型“三元组”,要求动态分配内存。每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组等。

选作内容:

   实现两个三元组的对应分量相加或相减,给三元组的各分量同乘一个比例因子等操作。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef float ElemType;
typedef ElemType *Triplet;
//1.动态存储分配初始化三元组T
Status initTriplet(Triplet &T, ElemType v1,ElemType v2,ElemType v3)
{
	T =(ElemType*)malloc(3*sizeof(ElemType));
	if (!T)
		exit(OVERFLOW);
	T[0] = v1;
	T[1] = v2;
	T[2] = v3;
	return OK;
}

//2.输出三元组
void printTriplet(Triplet T)
{
	printf("三元组为:%f %f %f\n", T[0], T[1], T[2]);
	
}

//3.取三元组的任意一个分量
Status Get(Triplet T,Status i,ElemType &e)
{
	if(i<1||i>3)
    	return ERROR;
    else
        e=T[i-1];
        return OK;
}


//4.置三元组T的第i元的值为e 
Status Put(Triplet &T,Status i,ElemType e)
{
    if(i<1||i>3)
    	 return ERROR;
    else
   		 T[i-1]=e;
		 return OK;
}

//5.求三元组的最大分量
Status GetMax(Triplet T, ElemType &e)
{
	Status j;
	e=T[0];
	for(j=1;j<3;j++)
	{
		if(e >= T[j])
			continue;
		else if(e < T[j])
			e = T[j];
	}
	printf("最大分量为:%f\n", e);
	return OK;
}

//6.求三元组的最小分量
Status GetMin(Triplet T, ElemType &e)
{
	Status j;
	e=T[0];
	for(j=1;j<3;j++)
	{
		if(e <= T[j])
			continue;
		else if(e > T[j])
			e = T[j];
	}
	printf("最小分量为:%f\n", e);
	return OK;
}

//7.实现该三元组的对应分量相加  eg.第二位和第三位
ElemType Addition(Triplet T, Status a, Status b)
{
	if(a<1||a>3)
	{
		return ERROR;
	}
	if(b<1||b>3)
	{
		return ERROR;
	}
	ElemType sum = 0;
	ElemType c, d;
	Get(T,a,c);
	Get(T,b,d);
	sum = c+d;
	printf("同乘后第%d位和第%d位分量相加为:%f\n",a, b, sum);
	return OK;
}


//8.实现该三元组的对应分量相减  eg.第二位和第三位
ElemType Subtract (Triplet T, Status a, Status b)
{
	if(a<1||a>3)
	{
		return ERROR;
	}
	if(b<1||b>3)
	{
		return ERROR;
	}
	ElemType sub = 0, c, d;
	Get(T,a,c);
	Get(T,b,d);
	sub = c-d;
	printf("第%d位和第%d位分量相减为:%f\n",a, b, sub);
	return OK;
}

//9.给三元组的各分量同乘一个比例因子
ElemType Homology(Triplet &T,Status a)
{
	int n;
	for(n=0;n<3;n++)
	{
		T[n]=T[n]*a;
	}
	printf("同乘%d后三元组为:%f %f %f\n", a, T[0], T[1], T[2]);
	return OK;
}

//10.销毁三元组 
Status DestroyTriplet(Triplet &T)
{
	free(T);
 	T=NULL;
 	return OK;
}

//主函数
Status main()
{
	Triplet T, T1;
	ElemType v1, v2, v3;
	ElemType e, yz;//yz为比例因子, a,b为相加位数,c,d为相减位数
	Status a, b, c, d;
	Status i;

	printf("给三元组T赋值:\n");
	
	scanf("%f %f %f", &v1, &v2, &v3);
	
	initTriplet(T, v1, v2, v3);//1.初始化三元组
	
	printTriplet(T);//2.输出三元组
	
	Get(T,i,e);//3.取三元组的任意一个分量
	
	Put(T,i,e);//4.置三元组T的第i元的值为e 
	
	GetMax(T,e);//5.求三元组的最大分量
	
	GetMin(T,e);//6.求三元组的最小分量
	printTriplet(T);//再次显示三元组
	
	//7.实现该三元组的对应分量相加 eg.第一位和第三位
	Addition(T,1,3);
	
	//8.实现该三元组的对应分量相减 eg.第二位和第三位
	Subtract(T,2,3);
	
	//9.给三元组的各分量同乘一个比例因子
	printf("请输入三元组各分量同乘的一个比例因子:\n");
	scanf("%f", &yz);
	Homology(T,yz);
	
	//10.销毁三元组
	DestroyTriplet(T);
	
	return OK;
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

为什么名字不能重复呢?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值