抽象資料型別三元組Triplet基本操作與實現 嚴蔚敏版
阿新 • • 發佈:2018-12-16
這個部落格基本操作大部分來自教材《資料結構C語言版》嚴蔚敏版,實現了書中的大部分功能,並且用了三個檔案。
一個是主函式,一個是功能模組,一個是標頭檔案定義,用VC6.0++完成
//標頭檔案宣告 #ifndef _FUNC_H #define _FUNC_H #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef float ElemType; typedef ElemType *Triplet; extern Status InitTriplet (Triplet &t,ElemType v1,ElemType v2,ElemType v3); extern Status DestroyTriplet (Triplet t); extern Status get(Triplet t,int i,ElemType &e); extern Status put(Triplet &t,int i,ElemType e); extern Status Max(Triplet t,ElemType &e); extern Status Min(Triplet t,ElemType &e); extern Status IsAscend(Triplet t); extern Status IsDescend(Triplet t); extern Status Average(Triplet t,ElemType &e); int system(const char *string); #endif
//功能模組 #include <stdio.h> #include <stdlib.h> #include "head.h" //初始化 Status InitTriplet (Triplet &t,ElemType v1,ElemType v2,ElemType v3) { t=(ElemType *)malloc(3*sizeof(ElemType)); if(!t) return OVERFLOW; t[0]=v1;t[1]=v2;t[2]=v3; return OK; } //銷燬 Status DestroyTriplet (Triplet t) { free(t); t=NULL; return OK; } //返回第i個值 Status get(Triplet t,int i,ElemType &e) { if (i<1||i>3) return ERROR; e=t[i-1]; return OK; } //置換 Status put(Triplet &t,int i,ElemType e) { if (i<1||i>3) return ERROR; t[i-1]=e; return OK; } //判斷升序 Status IsAscend(Triplet t) { return (t[0]<t[1])&&(t[1]<t[2]); } //判斷降序 Status IsDescend(Triplet t) { return (t[0]>=t[1])&&(t[1]>=t[2]); } //求最大值 Status Max(Triplet t,ElemType &e) { 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[0]<=t[1])?((t[0]<=t[2])?t[0]:t[2]):((t[1]<=t[2])?t[1]:t[2]); return OK; } //求平均值 Status Average(Triplet t,ElemType &e) { e=(t[0]+t[1]+t[2])/3; return OK; }
//主函式 #include <stdio.h> #include <stdlib.h> #include "head.h" void main() { Triplet p; ElemType e,v1,v2,v3; int i; char select; printf("輸入三個數,建立一個三元組\n"); scanf("%d%d%d",&v1,&v2,&v3); if (InitTriplet(p,v1,v2,v3)==OVERFLOW) printf("分配失敗,退出程式!"); else do { printf("\n"); printf("1:取三元組第i個元素\n"); printf("2:判斷三元組元素是否遞增\n"); printf("3:求最大值\n"); printf("4:置換第i個元素\n"); printf("5:判斷三元組元素是否遞減\n"); printf("6:求最小值\n"); printf("7:求三元組平均值\n"); printf("0:結束!\n"); printf("請輸入選擇!\n"); getchar(); scanf("%c",&select); switch (select) {case '1': //get printf("\ni="); scanf("%d",&i); if (get(p,i,e)==ERROR) printf("i值不合法\n"); else printf("第%d個元素的值為:%d\n",i,e); break; case '2': //IsAscend printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]); printf("\n"); if (IsAscend(p)==1) printf("三元組遞增有序\n"); else printf("三元組非遞增有序\n"); break; case '3': //Max printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]); Max(p,e); printf("最大值是:%d\n",e); break; case '4': //put printf("\n"); printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]); printf("請輸入想置換的第i個元素"); printf("\ni="); scanf("%d",&i); printf("\nx="); scanf("%d",&e); if (put(p,i,e)==ERROR) printf("i值不合法\n"); else printf("置換第%d個元素後的3個元素分別為:%d,%d,%d\n",i,p[0],p[1],p[2]); break; case '5': //IsDescend printf("\n"); printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]) if (IsDescend(p)==1) printf("三元組遞減有序\n"); else printf("三元組非遞減有序\n"); break; case '6': printf("\n"); printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]); Min(p,e); printf("最小值是:%f\n",e); break; case'7': printf("\n"); printf("3個元素分別為:%d,%d,%d\n",p[0],p[1],p[2]); Average(p,e); printf("平均值是:%.2f\n",e); break; case'0': printf("操作結束!"); break; default: printf("輸入選擇出錯!\n"); }// end of switch }while(select!='0'); //end of while DestroyTriplet(p); }// end of main
三個檔案放在一起放在一個工程中才能執行