当前位置:文档之家› 抽象数据类型的表示与实现(实验一)

抽象数据类型的表示与实现(实验一)

实验一抽象数据类型的表示与实现一.实验目的及要求(1)熟悉类C语言的描述方法,学会将类C语言描述的算法转换为C源程序实现;(2)理解抽象数据类型的定义,编写完整的程序实现一个抽象数据类型(如三元组);(3)认真阅读和掌握本实验的参考程序,上机运行程序,保存和打印出程序的运行结果,并结合程序进行分析。

二.实验内容(1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。

要求:将计算过程写成一个函数,并采用引用参数实现值的求解。

(2)编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。

三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)(1)编程实现对一组从键盘输入的数据,计算它们的最大值、最小值等,并输出。

要求:将计算过程写成一个函数,并采用引用参数实现值的求解。

程序代码部分:头文件:#define N 10000void comparason(double a[],int n,double &max,double &min);主函数:#include""#include""int main(){int n;printf("请输入数据个数\n");scanf("%d",&n);double a[N],max,min;int i;printf("请输入数据(空格隔开)\n");for(i=0;i<n;i++){scanf("%lf",&a[i]);}comparason(a,n,max,min);printf("最大值为%lf,最小值为%lf\n",max,min);return 0;}功能函数:#include""#include""void comparason(double a[],int n,double &max,double &min) {int i;max=a[0];min=a[0];for(i=0;i<n;i++){if(max<a[i]){max=a[i];}if(min>a[i]){min=a[i];}}return;}运行结果:(2)编程实现抽象数据类型三元组的定义、存储和基本操作,并设计一个主菜单完成各个功能的调用。

程序代码部分:头文件:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef ElemType *Triplet;Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3); Status DestroyTriplet(Triplet &T);Status Get(Triplet T,int i,ElemType &e);Status Put(Triplet &T,int i,ElemType e);Status IsAscending(Triplet T);Status IsDescending(Triplet T);Status Max(Triplet T,ElemType &e);Status Min(Triplet T,ElemType &e);主函数:#include""#include""#include""int main(){Triplet T;ElemType v1,v2,v3;printf("请输入三个数\n");scanf("%d%d%d",&v1,&v2,&v3);int x;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){case 1:DestroyTriplet(T);printf("三元组已销毁,若想进行其他操作,需重启程序,新建三元组\n");break;case 2:printf("请输入要查看的位置\n");int a,e;scanf("%d",&a);Get(T,a,e);printf("第%d个值为%d\n",a,e);break;case 3:printf("请输入要修改的位置和数值\n");int b,c;scanf("%d%d",&b,&c);Put(T,b,c);printf("修改后三个值为%d,%d,%d\n",T[0],T[1],T[2]);break;case 4:int f;f=IsAscending(T);if(f==1)printf("是升序排列\n");elseprintf("不是升序排列\n");break;case 5:int g;g=IsDescending(T);if(g==1)printf("是降序排列\n");elseprintf("不是降序排列\n");break;case 6:int y;Max(T,y);printf("最大值为%d\n",y);break;case 7:int z;Min(T,z);printf("最小值为%d\n",z);break;case 0:printf("程序结束!\n");break;default:printf("输入出错!\n");}}while(x!=0&&x!=1);return 0;}功能函数:#include""#include""#include""Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3) {T=(ElemType *)malloc(3*sizeof(ElemType));if(!T) exit(OVERFLOW);T[0]=v1;T[1]=v2;T[2]=v3;return OK;}Status DestroyTriplet(Triplet &T){free(T);T=NULL;return OK;}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 IsAscending(Triplet T){return (T[0]<=T[1])&&(T[1]<=T[2]);}Status IsDescending(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;}运行结果:四.实验结果的分析与评价(该部分如不够填写,请另加附页)1.三元组可含多个数据项;2.采用顺序存储方式;注:实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。

相关主题