1. 程式人生 > >資料結構--抽象資料型別三元組Triplet的表示和實現

資料結構--抽象資料型別三元組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