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

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

建立一个项目,包含以下三个部分:

(1)第一部分:Common.h

#define TRUE	    1
#define FALSE		0
#define OK			1 
#define ERROR		0
#define INFEASIBLE  -1
#define OVERFLOW	-2

typedef int Status;

在VS2019下,需将头文件:Common.h做些修改:

#define TRUE	    1
#define FALSE		0
#define OK			1 
#define ERROR		0
#define INFEASIBLE  -1

typedef int Status;

(2)第二部分:Triplet.h

#include "Common.h"
#include<cstdlib>

typedef int ElemType;

typedef ElemType* Triplet;//由InitTriplet分配3个元素存储空间

Status InitTriplet(Triplet& T, ElemType v1, ElemType v2, ElemType v3)
{	//操作结果:构造了三元组T,元素e1,e2和e3的值分别被赋以参数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)
{	//操作结果:三元组T被销毁。

	free(T);
	T = NULL;
	return OK;
} //DestroyTriplet

Status Get(Triplet T, int i, ElemType& e)
{
	//用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的3个元素按升序排列,则返回1,否则返回0。

	return (T[0] >= T[1]) && (T[1] >= T[2]);
} //IsAscending

Status IsDescending(Triplet T)
{
	//如果三元组T的3个元素按降序排列,则返回1,否则返回0。

	return (T[0] <= T[1]) && (T[1] <= T[2]);
} //IsDescending

Status Max(Triplet T, ElemType& e)
{
	//用e返回T的3个元素中的最大值。

	e = (T[0] >= T[1]) ? ((T[0] >= T[2]) ? T[0] : T[2]) : ((T[1] >= T[2]) ? T[1] : T[2]);
	return OK;
}

Status Min(Triplet T, ElemType& e)
{
	//用e返回T的3个元素中的最小值。

	e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : ((T[1] <= T[2]) ? T[1] : T[2]);
	return OK;
}

(3)第三部分:main.cpp

#include<stdio.h>
#include "Triplet.h"

int main()
{
	Triplet triplet;  //等价于int* triplet    
	ElemType  e;//等价于int e 
	int i;

	InitTriplet(triplet, 4, 7, 5);//初始化操作,返回值是1 

	for (i = 0; i < 3; i++)
	{
		Get(triplet, i + 1, e);//得到的返回值为OK,是1       最终e为triplet[0],为4
		printf("%d %d\n", triplet[i], e);//打印出triplet[0]和e的值,都为4 
	}

	e = 13;//对e重新赋新值13 
	Put(triplet, 2, e);//更改triplet[1]的值为13
	for (i = 0; i < 3; i++)
		printf("%d ", triplet[i]);//分别打印出triplet[0]、triplet[1]、triplet[2]的值,分别为4、13、5 
	printf("\n");

	if (IsAscending(triplet))//返回值为0 
		printf("升序\n");//不执行 
	else
	{
		if (IsDescending(triplet))//返回值为0 
			printf("降序\n");//不执行 
		else
			printf("乱序\n");//执行 
	}

	Max(triplet, e);//调用Max函数,把数组最大值赋值给e 
	printf("最大值: %d\n", e);//输出最大值e 
	Min(triplet, e);//调用Min函数,把数组最小值赋值给e 
	printf("最小值: %d\n", e);//输出最小值e 

	DestroyTriplet(triplet);//使指针triplet置空,防止产生野指针 

	return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值