数据结构--抽象数据类型三元组Triplet的表示和实现

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

数据类型是一个值的集合和定义在这个值集上的一组操作的总称。按“值”的不同特性,高级程序语言中的数据类型可分为两类:一类是非结构的原子类型,原子类型的值是不可分解的;另一类是结构类型,结构类型的值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是非结构的,也可以是结构的。

抽象数据类型(Abstract Data Type,简称ADT)是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。

** 抽象数据类型三元组Triplet的表示和实现

//- - - - - - - - -采用动态分配的顺序存储结构- - - - - -
typedef ElemType * Triplet; //由 InitTriplet 分配3个元素存储空间



//- - - - - - - - -基本操作的函数原型说明- - - - - -
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 的3个元素按升序排列,则返回1,否则返回0。

Status IsDescending (Triplet T);
	// 初始条件:三元组 T 已存在。
	// 操作条件:如果 T 的3个元素按降序排列,则返回1,否则返回0。

Status Max (Triplet T, ElemType &e);
	 // 初始条件:三元组 T 已存在。
	 // 操作结果:用 e 返回 T 的3个元素中的最大值。

Status Min (Triplet T, ElemType &e);
	 // 初始条件:三元组 T 已存在。
	 // 操作结果:用 e 返回 T 的3个元素中的最小值。




** malloc函数是在内存的动态存储区中分配一个长度为size的连续空间。
** 其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
** malloc的语法是:指针名 =(数据类型 * )malloc(长度); 其中(数据类型*)表示指针。
 
//- - - - - - - - - - - - -基本操作的实现- - - - - - - - - -
Status InitTriplet (Triplet &T, ElemType v1, ElemType v2, ElemType v3) {
	// 构造三元组 T,依位置 T 的 3 个元素的初值为 v1,v2,v3。
	T = (ElemType * ) malloc (3 * sizeof(ElemType));     // 分配 3 个元素的存储空间
	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) {
	// 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 的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 的最大元素的值。
	e = (T[0] >= T[1]) ? ((T[0] >= T[2]) ? T[0] : T[2]) : ((T[1] >= T[2]) ? T[1] : T[2]);
}// 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]);
}// Min
  • 3
    点赞
  • 0
    评论
  • 20
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值