实验报告 抽象数据类型的表示和实现 (三元组) 实现对三元组的基本操作 创建 取值 置换 打印/销毁三元组等功能 数据结构(C语言版)

实验内容
基本要求:
设计实现抽象数据类型“三元组”,要求动态分配内存。每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组等。
选作内容:
实现两个三元组的对应分量相加或相减,给三元组的各分量同乘一个比例因子等操作。
代码实现:

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define FALSE 0
#define LIST_INIT_SIZE 200//初始容量为200 
typedef int Status;
typedef float ElemType;
typedef struct
{
	ElemType *elem;
}Triplet;
// 创建一个三元组 
void initTriplet(Triplet &L,ElemType v0,ElemType v1,ElemType v2)
{
	L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
	L.elem[0]=v0;
	L.elem[1]=v1;
	L.elem[2]=v2;
} 
//打印三元组 
void print(Triplet &L)
{
	int i;
	for(i=0;i<3;i++)
	{
		printf("%f ",L.elem[i]);
	}
}
//取三元组的任意一个分量
ElemType Getelem(Triplet L,Status i)
{
	if(i<1||i>3)
	{
		return FALSE;
	}
	ElemType e=L.elem[i-1];
	return e;
}
//置三元组的任意一个分量 
ElemType Putelem(Triplet &L,Status i,ElemType e)
{
	if(i<1||i>3)
	{
		return FALSE;
	}
	L.elem[i-1]=e;
	return OK;
}
//求三元组的最大分量 
ElemType max(Triplet L)
{
	Status temp;
	if(L.elem[0]>L.elem[1])
	{
		temp=L.elem[0];
	}else
	{
		temp=L.elem[1];
	}
	if(temp>L.elem[2])
	{
		return temp;
	}else
	{
		return L.elem[2];
	}
}
//求三元组的最小分量
ElemType min(Triplet L)
{
	Status temp;
	if(L.elem[0]<L.elem[1])
	{
		temp=L.elem[0];
	}
	else
	{
		temp=L.elem[1];
	}
	if(temp<L.elem[2])
	{
		return temp;
	}else
	{
		return L.elem[2];
	}
}
//实现两个三元组的对应分量相加
ElemType sum(Triplet L,ElemType a,ElemType b)
{
	if(a<1||a>3)
	{
		return FALSE;
	}
	if(b<1||b>3)
	{
		return FALSE;
	}
	ElemType sum=0;
	sum+=Getelem(L,a);
	sum+=Getelem(L,b);
	return sum;
}
//实现两个三元组的对应分量相减
ElemType DifferenceVaule(Triplet L,ElemType a,ElemType b)
{
	if(a<1||a>3)
	{
		return FALSE;
	}
	if(b<1||b>3)
	{
		return FALSE;
	}
	a=Getelem(L,a);
	b=Getelem(L,b);
	return a-b;
	
}
//给三元组的各分量同乘一个比例因子(2)
ElemType CoRide(Triplet &L,ElemType a)
{
	int i;
	for(i=0;i<3;i++)
	{
		L.elem[i]=L.elem[i]*a;
	}
}
//销毁三元组 
DestroyTriplet(Triplet &L)
{
	free(L.elem);
	return OK;
}
int main()
{
	Triplet T;
	ElemType v0,v1,v2;
	printf("请输入三元组的值:\n");
	scanf("%f %f %f",&v0,&v1,&v2);
	initTriplet(T,v0,v1,v2);
	printf("输出三元组的值:");
	print(T);
	printf("\n");
	printf("获取三元组中第二个值:%f\n",Getelem(T,2));
	Putelem(T,2,11);
	printf("将三元组中第二个值替换为11:"); 
	print(T);
	printf("\n");
	printf("替换后三元组中最大值为:%f\n",max(T)); 
	printf("替换后三元组中最小值为:%f\n",min(T));
	printf("替换后三元组中第一个值和第二个值之和为:%f\n",sum(T,1,2));
	printf("替换后三元组中第一个值和第二个值之差为:%f\n",DifferenceVaule(T,1,2));
	printf("给三元组的各分量同乘一个比例因子(2):");
	CoRide(T,2);
	print(T);
	DestroyTriplet(T);
	return 0;
}

打印结果:

注意:
1:释放动态内存时要将结构体中的成员分别释放;(和开空间相对应)
2:int a[i] 中的i必须为整型,不能为浮点型
3:scanf读入时最后一个 %f 后面不能加空格

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花花叔叔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值