实验一抽象数据类型的表示与实现一.实验目的及要求(1)熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现;(2)理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组);(3)认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。二.实验内容(1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。要求:将计算过程写成一个函数,并采用引用参数实现值的求解。(2)编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。要求:将计算过程写成一个函数,并采用引用参数实现值的求解。程序代码部分:头文件:#defineN10000voidcomparason(doublea[],intn,double&max,double&min);主函数:#includestdio.h#include1.hintmain(){intn;printf(请输入数据个数\n);scanf(%d,&n);doublea[N],max,min;inti;printf(请输入数据(空格隔开)\n);for(i=0;in;i++){scanf(%lf,&a[i]);}comparason(a,n,max,min);printf(最大值为%lf,最小值为%lf\n,max,min);return0;}功能函数:#includestdio.h#include1.hvoidcomparason(doublea[],intn,double&max,double&min){inti;max=a[0];min=a[0];for(i=0;in;i++){if(maxa[i]){max=a[i];}if(mina[i]){min=a[i];}}return;}运行结果:(2)编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。程序代码部分:头文件:#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;typedefintElemType;typedefElemType*Triplet;StatusInitTriplet(Triplet&T,ElemTypev1,ElemTypev2,ElemTypev3);StatusDestroyTriplet(Triplet&T);StatusGet(TripletT,inti,ElemType&e);StatusPut(Triplet&T,inti,ElemTypee);StatusIsAscending(TripletT);StatusIsDescending(TripletT);StatusMax(TripletT,ElemType&e);StatusMin(TripletT,ElemType&e);主函数:#includestdio.h#includestdlib.h#include1.hintmain(){TripletT;ElemTypev1,v2,v3;printf(请输入三个数\n);scanf(%d%d%d,&v1,&v2,&v3);intx;InitTriplet(T,v1,v2,v3);do{printf(请选择下面操作\n);printf(1、销毁三元组\n);printf(2、查看第i个值\n);printf(3、修改第i个值\n);printf(4、判断是否为升序\n);printf(5、判断是否为降序\n);printf(6、查看最大值\n);printf(7、查看最小值\n);printf(0、结束程序!\n);scanf(%d,&x);switch(x){case1:DestroyTriplet(T);printf(三元组已销毁,若想进行其他操作,需重启程序,新建三元组\n);break;case2:printf(请输入要查看的位置\n);inta,e;scanf(%d,&a);Get(T,a,e);printf(第%d个值为%d\n,a,e);break;case3:printf(请输入要修改的位置和数值\n);intb,c;scanf(%d%d,&b,&c);Put(T,b,c);printf(修改后三个值为%d,%d,%d\n,T[0],T[1],T[2]);break;case4:intf;f=IsAscending(T);if(f==1)printf(是升序排列\n);elseprintf(不是升序排列\n);break;case5:intg;g=IsDescending(T);if(g==1)printf(是降序排列\n);elseprintf(不是降序排列\n);break;case6:inty;Max(T,y);printf(最大值为%d\n,y);break;case7:intz;Min(T,z);printf(最小值为%d\n,z);break;case0:printf(程序结束!\n);break;default:printf(输入出错!\n);}}while(x!=0&&x!=1);return0;}功能函数:#includestdio.h#includestdlib.h#include1.hStatusInitTriplet(Triplet&T,ElemTypev1,ElemTypev2,ElemTypev3){T=(ElemType*)malloc(3*sizeof(ElemType));if(!T)exit(OVERFLOW);T[0]=v1;T[1]=v2;T[2]=v3;returnOK;}StatusDestroyTriplet(Triplet&T){free(T);T=NULL;returnOK;}StatusGet(TripletT,inti,ElemType&e){if(i1||i3)returnERROR;e=T[i-1];returnOK;}StatusPut(Triplet&T,inti,ElemTypee){if(i1||i3)returnERROR;T[i-1]=e;returnOK;}StatusIsAscending(TripletT){return(T[0]=T[1])&&(T[1]=T[2]);}StatusIsDescending(TripletT){return(T[0]=T[1])&&(T[1]=T[2]);}StatusMax(TripletT,ElemType&e){e=(T[0]=T[1])?((T[0]=T[2])?T[0]:T[2]):((T[1]=T[2])?T[1]:T[2]);returnOK;}StatusMin(TripletT,ElemType&e){e=(T[0]=T[1])?((T[0]=T[2])?T[0]:T[2]):((T[1]=T[2])?T[1]:T[2]);returnOK;}运行结果:四.实验结果的分析与评价(该部分如不够填写,请另加附页)1.三元组可含多个数据项;2.采用顺序存储方式;注:实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。