三元组处理器(动态分配内存)

本文介绍了一个简单的抽象数据类型“三元组”的实现,包括创建、读取、更新三元组的操作,并实现了查找最大值、最小值等功能。通过动态内存分配确保了程序的灵活性。

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

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

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef float ElemType;
typedef struct
{
	ElemType e[3];
}Triplet;
//创建三元组 
Triplet *InitTriplet(Triplet *T,ElemType v0,ElemType v1,ElemType v2,Status i)
{
	printf("请输入三元组的三个分量值(以空格相间):\n");
	scanf("%f %f %f",&v0,&v1,&v2);
	T=(Triplet*)malloc(sizeof(Triplet)); 
	T->e[0]=v0;
	T->e[1]=v1;
	T->e[2]=v2;
	printf("三元组的三个分量值分别为:\n");
	for(i=0;i<3;i++)
	{
		printf("%4.2f ",T->e[i]);
	}
	printf("\n");
	return T;
}
//重置三元组 
Status DestroyTriplet(Triplet *T)
{
	if(T)
	{
		free(T);
		printf("重置成功!\n");
		return OK;
	}
	else
	printf("三元组不存在!\n"); 
}
//取三元组的第i个分量 
Status Get(Triplet *T,int i)
{
	printf("请输入您需要的分量的序号\n");
	scanf("%d",&i);
	if(i<1||i>3)
	{
    printf("输入非法!\n");
	return ERROR;
    }
	else
	{
	    printf("第%d个分量的值为:%4.2f\n",i,T->e[i-1]);
	    return OK;
    }
}
//置三元组的第i个分量 
Status Put(Triplet *T,Status i,ElemType e)
{
	printf("请输入您所置分量的序号及要置的值(以空格相间)\n");
	scanf("%d %f",&i,&e);
	if(i<1||i>3)
	{
    return ERROR;
    }
	else 
	{
	    T->e[i-1]=e;
	    printf("已将第%d个分量的值修改为:%4.2f\n",i,T->e[i-1]);
	    printf("修改后三元组的三个分量值分别为:\n");
	    for(i=0;i<3;i++)
	    {
		    printf("%4.2f ",T->e[i]);
	    }
	    printf("\n");
	    return OK;
    }
}
//判断升序
Status IsAscending(Triplet *T)
{
	return(T->e[0]<=T->e[1]&&T->e[1]<=T->e[2]);
}
//判断降序
Status IsDescending(Triplet *T)
{
	return(T->e[0]>=T->e[1]&&T->e[1]>=T->e[2]);
}
//求三元组的最大分量 
ElemType getMax(Triplet *T,ElemType e)
{
	e=-99999;
	int i=0;
	for(i=0;i<3;i++)
	{
		if(T->e[i]>=e)
		e=T->e[i];
	}
	printf("该三元组中的最大分量为:%4.2f\n",e);
}
//求三元组的最小分量 
ElemType getMin(Triplet *T,ElemType e)
{
	e=99999;
	int i=0;
	for(i=0;i<3;i++)
	{
		if(T->e[i]<=e)
		e=T->e[i];
	}
	printf("该三元组中的最小分量为:%4.2f\n",e);
}
void menu()
{
	printf("请输入菜单选项:         *\n");
	printf("1 创建三元组             *\n");
	printf("0 退出系统               *\n");
	printf("**************************\n");
}
void menu1()
{
	printf("**************************\n");
	printf("请输入菜单选项:         *\n");
	printf("0 退出系统               *\n");
	printf("1 取三元组的第i个分量    *\n");
	printf("2 置三元组的第i个分量    *\n");
	printf("3 判断三元组升降序       *\n");
	printf("4 取三元组的最大分量     *\n");
	printf("5 取三元组的最小分量     *\n"); 
	printf("6 销毁三元组并重新创建   *\n");
	printf("**************************\n");
}
int main()
{
	Triplet *T;
	Status flag,flog,i;
	ElemType v0,v1,v2,e,m=1;
    printf("***欢迎使用三元组处理器***\n");
    while(1)
    {
    	menu();
    	scanf("%d",&flag);
    	getchar();
    	switch(flag)
    	{
    		case 0:{
			       printf("正在退出,请稍候");
    		       printf(".");
			       printf(".");
	               printf(".");
				   system("cls");
				   printf("*******欢迎下次使用*******\n");
			       return 0;
			       }
			case 1:T=InitTriplet(T,v0,v1,v2,i);
			       while(m=1)
			       {
						menu1();
			       	    scanf("%d",&flog);
			       	    getchar();
			       	    switch(flog)
			       	    {
			       	    	case 0: printf("正在退出,请稍候");
								    printf(".");
								    printf(".");
								    printf(".");
								    system("cls");
								    printf("*******欢迎下次使用*******\n");
			                        return 0;
			                case 1:Get(T,i);
			                       break;
			                case 2:Put(T,i,e);
			                       break;
			                case 3:if(IsAscending(T))
	                                    {
		                                    printf("该三元组的元素为升序排列\n"); 
	                                    }
	                                    else if(IsDescending(T))
	                                    {
		                                    printf("该三元组的元素为降序排列\n"); 
	                                    }
	                                    else 
								        {
								            printf("该三元组的元素非升降序排列\n");
								            
								            break;
								        }
								   break;
							case 4:getMax(T,e);
			                       break;
			                case 5:getMin(T,e);
			                       break;
			                case 6:printf("正在销毁,请稍候");
			                       printf(".");
			                       printf(".");
			                       printf(".");
			                       DestroyTriplet(T);
			                       system("cls");
			                       T=InitTriplet(T,v0,v1,v2,i);
							       break;
		                }
				   }
				   break;
	    }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值