数据结构严蔚敏例1-6源代码

本文档展示了如何使用C语言定义和操作一个三元组数据结构,包括初始化、销毁、获取和设置元素值、判断元素升序和降序以及找到最大和最小值的功能。通过示例代码,演示了这些操作的使用方法。

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

#include<stdio.h>
#include<stdlib.h>
#define TRUE  1
#define FALSE 0
#define OK    1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef ElemType *Triplet;
//基本操作的函数原型说明
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3);
//构造了三元组T,元素e1,e2和e3分别被赋以参数v1,v2和v3的值
Status DestroyTriplet(Triplet& T);
//三元组T被销毁
Status Get(Triplet T, int i, ElemType& e);
//初始条件:三元组T已存在,1 <= i <= 3
//用e返回T的第i个的值
Status Put(Triplet& T, int i, ElemType e);
//初始条件:三元组T已存在,1 <= i <= 3
//操作结果:改变T的第i元的值为e
Status IsAscending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按升序排列,则返回1,否则返回0
Status IsDescending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按蒋旭排列,则返回1,否则返回0
Status Max(Triplet T, ElemType& e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最大值
Status Min(Triplet T, ElemType& e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最小值

//基本操作的实现
Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3)
{
	//构造三元组T,依次置T的三个元素的初值为v1,v2,v3
	T = (ElemType*)malloc(3 * sizeof(ElemType));
	if (!T)exit(OVERFLOW);//分配空间失败
	T[0] = v1;
	T[1] = v2;
	T[2] = v3;
	return OK;
}//InitTriplet

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

Status Get(Triplet T, int i, ElemType& e)
{
	//1 <= i <= 3,用e返回T的第i个元的值
	if (i < 1 || i>3)
		return ERROR;
	e = T[i - 1];
	return OK;
}//Get

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

Status IsAscending(Triplet T)
{
	//如果T的三个元素按升序排序,则返回1,否则返回0
	return (T[0] <= T[1]) && (T[1] <= T[2]);
}//IsAscending

Status IsDescending(Triplet T)
{
	// 如果T的三个元素按降序排序,则返回1,否则返回0
	return (T[0] >= T[1]) && (T[1] >= T[2]);
}//IsDescending

Status Max(Triplet T, ElemType& e)
{
	//用e返回指向T的最大元素的值
	e = (T[0] >= T[1]) ? ((T[0] >= T[2]) ? T[0] : T[2]) : ((T[1] >= T[2] ? T[1] : T[2]));
	return OK;
}//Max

Status Min(Triplet T, ElemType& e)
{
	//用e返回指向T的最小元素的值
	e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : ((T[1] <= T[2] ? T[1] : T[2]));
	return OK;
}//Min


int main()
{   
	//步骤一 
	Triplet a;
	ElemType a1,a2,a3;
	printf("请输入三个元素的值:\n");
	scanf("%d %d %d",&a1,&a2,&a3);
	printf("%d 如果为1表示初始化执行成功\n",InitTriplet(a,a1,a2,a3));
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	//步骤二
	ElemType b;
	printf("%d 如果为1表示取值执行成功\n",
	Get(a,2,b));
	printf("第二个值为 %d\n",b);
	//步骤三 
	b=5;
	printf("%d 如果为1表示更改值执行成功\n",Put(a,2,b));
	printf("第二个值改为 %d\n",a[2-1]);
	//步骤四 
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照升序排序,不升序排序输出0\n",IsAscending(a)); 
	InitTriplet(a,a1,a2,a3); 
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照升序排序,不升序排序输出0\n",IsAscending(a));
	//步骤五
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照降序排序,不降序排序输出0\n",IsDescending(a)); 
	InitTriplet(a,a3,a2,a1); 
	printf("按照顺序输出a的数据:%d %d %d\n",a[0],a[1],a[2]);
	printf("%d 如果为1表示元素按照降序排序,不降序排序输出0\n",IsDescending(a));
	//步骤六
	printf("%d 如果为1表示取得最大值\n",Max(a,b));
	printf("输出最大值 %d\n",b);
    //步骤七
	printf("%d 如果为1表示取得最小值\n",Min(a,b));
	printf("输出最小值 %d\n",b);
	//步骤八
	printf("%d 如果为1表示销毁本个三元组数据\n",DestroyTriplet(a));  
	return 0;
 } 

 运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值