資料結構--抽象資料型別三元組Triplet的表示和實現
阿新 • • 發佈:2019-01-07
抽象資料型別三元組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