復習數據結構,發現今天才真正了解數據結構是怎么一回事。當初學的完全忘了,這次從新開始吧。
1.抽象數據類型
/* ADT Triplett { 數據對象:D={e1,e2,e3|e1,e2,e3∈ElemSet(定義了關系運算的某個集合) } 數據關系:R={<e1,e2,><e2,e3> } 基本操作: InitTriplet(T, v1, v2, v3) 操作結果:構造了三元組T,元素e1,e2和e3分別被賦以參數v1,v2和v3的值。 DestroyTriplet(T) 操作結果:三元組T被銷毀。 Get(T, i,e) 初始條件:三元組T已存在,0<i<4 操作結果: 用e返回T的第i個元素的值。 Put(T, i, e) 初始條件:三元組T已存在0<i<4, 操作結果:改變T的第i個元素值為e。 若存在,返回元素在表中的位置;若不存在,返回-1. Max(T,e) 初始條件:三元組T已存在 操作結果:用e返回T的3個元素中的最大值。 Min(T,e) 初始條件:三元組T已存在 操作結果:用e返回T的3個元素中的最小值。 Print(T) 初始條件:三元組T已存在 操作結果:打印三元組T的各個元素值 */
2.源代碼
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define OVERFLOW -2 #define OK 1 #define ERROR 0 typedef int status; typedef int ElemType; typedef ElemType *Triplet; int InitTriplet(Triplet *T,int v1,int v2,int v3){//構造三元組T,依次賦值v1,v2,v3 (*T)=(int *)malloc(3*sizeof(int)); if(!T) exit(OVERFLOW); (*T)[0]=v1;(*T)[1]=v2;(*T)[2]=v3; return OK; } int DestoryTriplet(Triplet *t){//銷毀三元組 free(*t); *t=NULL; return OK; } int Get(Triplet t,int i,int *e){ //去三元組的一個分量,用e返回t的第i元素的值 if (i<1||i>3) return ERROR; *e=t[i-1]; return OK; } int Put(Triplet *t,int i,int e){ if (i<1||i>3) return OVERFLOW; (*t)[i-1]=e; return OK; } int Max(Triplet T,int *e){ *e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]); return OK; } int Min(Triplet T,int *e){ *e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]); return OK; } void Print(Triplet T){ int i; ElemType elem, *p=&elem; for(i=1;i<=3;i++){ Get(T,i,p); printf("T[%d]=%d\n",i,elem); } } void main(){ Triplet T,*t=&T; int e1,e2,e3,e,*p=&e; int i; printf("\n請輸入三元組元素e1 e2 e3:\n"); scanf("%d%d%d",&e1,&e2,&e3); printf("輸出的三元組為:\n"); InitTriplet(t,e1,e2,e3); Print(T); printf("\n請輸入要取出的三元組分量的位序\n"); scanf("%d",&i); if(i>=1&&i<=3){ Get(T,i,p); printf("\n三元組中第%d個元素是:%d\n",i,*p); }else{ printf("輸入不正確\n"); } printf("\n請輸入要置換的三元組分量的位序i:"); scanf("%d",&i); if (i>=1&&i<=3) { printf("\n請輸入要置換成新的元素為:"); scanf("%d",&e); Put(t,i,e); printf("\n置換后新的三元組T為:\n"); Print(T); }else{ printf("輸入不正確!\n"); } printf("%d\n",Max(T,p)); printf("\n最大值為:%d\n",e); Min(T,p); printf("\n最小值為:%d\n",e); DestoryTriplet(t); }
3.運行結果

4.總結
C語言基礎要扎實,指針,內存動態分配等需要復習加強。
