实验一抽象数据类型的表示和实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

(二〇一四年九月《数据结构》实验报告学校代码:10128学号:201220905048题目:抽象数据类型的表示和实现学生姓名:孙跃学院:理学院系别:数学系专业:信息与计算科学班级:信计12-2任课教师:杜雅娟1一、实验目的1.熟悉VisualC++语言的上机环境,掌握C语言的基本结构。2.理解抽象数据类型的表示和实现。二、实验内容抽象数据类型Triplet的表示和实现。三、实验程序根据给出的程序清单分别另建立4个文件:c1.h、c1-1.h、bo1-1.cpp和main1-1.cpp,并把它们保存在同一个文件夹中。1.预定义常量和类型教材定义OK、ERROR等为函数结果状态代码,文件Status为其类型。我们把这些信息放到头文件c1.h中。c1.h还包含一些常用的,如string.h、stdio.h等。为了操作的方便,几乎每一个程序都把c1.h包含进去,也就把这些结果状态代码和头文件包含了进去。头文件的内容如下://c1.h(程序名)#includestring.h#includectype.h#includemalloc.h//malloc()等#includelimits.h//INT_MAX等#includestdio.h//EOF(=^Z或F6),NULL#includestdlib.h//atoi()#includeio.h//eof()#includemath.h//floor(),ceil(),abs()#includeprocess.h//exit()#includeiostream.h//cout,cin//函数结果状态代码#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-12//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行typedefintStatus;//Status是函数的类型,其值是函数结果状态代码,如OK等typedefintBoolean;//Boolean是布尔类型,其值是TRUE或FALSE2.采用动态分配的顺序存储结构采用动态分配的顺序存储结构的头文件名取名为c1-1.h//c1-1.h采用动态分配的顺序存储结构typedefElemType*Triplet;//由InitTriplet分配三个元素存储空间//Triplet类型是ElemType类型的指针类型,用它定义的变量存放ElemType类型数据的地址3.抽象数据类型Triplet和ElemType的基本操作//bo1-1.cpp抽象数据类型Triplet和ElemType(由c1-1.h定义)的基本操作(8个)StatusInitTriplet(Triplet&T,ElemTypev1,ElemTypev2,ElemTypev3){//操作结果:构造三元组T,依次置T的三个元素的初值为v1,v2和v3if(!(T=(ElemType*)malloc(3*sizeof(ElemType))))exit(OVERFLOW);T[0]=v1,T[1]=v2,T[2]=v3;returnOK;}StatusDestroyTriplet(Triplet&T){//操作结果:三元组T被销毁free(T);T=NULL;returnOK;}3StatusGet(TripletT,inti,ElemType&e){//初始条件:三元组T已存在,1≤i≤3。操作结果:用e返回T的第i元的值if(i1||i3)returnERROR;e=T[i-1];returnOK;}StatusPut(TripletT,inti,ElemTypee){//初始条件:三元组T已存在,1≤i≤3。操作结果:改变T的第i元的值为eif(i1||i3)returnERROR;T[i-1]=e;returnOK;}StatusIsAscending(TripletT){//初始条件:三元组T已存在。操作结果:如果T的三个元素按升序排列,返回1,否则返回0return(T[0]=T[1]&&T[1]=T[2]);}StatusIsDescending(TripletT){//初始条件:三元组T已存在。操作结果:如果T的三个元素按降序排列,返回1,否则返回0return(T[0]=T[1]&&T[1]=T[2]);}StatusMax(TripletT,ElemType&e){//初始条件:三元组T已存在。操作结果:用e返回T的三个元素中的最大值e=T[0]=T[1]?T[0]=T[2]?T[0]:T[2]:T[1]=T[2]?T[1]:T[2];4returnOK;}StatusMin(TripletT,ElemType&e){//初始条件:三元组T已存在。操作结果:用e返回T的三个元素中的最小值e=T[0]=T[1]?T[0]=T[2]?T[0]:T[2]:T[1]=T[2]?T[1]:T[2];returnOK;}4.检验bo1-1.cpp中的各基本操作函数是否正确的主函数//main1-1.cpp检验基本操作bo1-1.cpp的主函数#includec1.h//要将程序中所有#include命令所包含的文件拷贝到当前目录下//以下2行可根据需要选用一个(且只能选用一个),而不需改变基本操作bo1-1.cpptypedefintElemType;//定义抽象数据类型ElemType在本程序中为整型//typedefdoubleElemType;//定义抽象数据类型ElemType在本程序中为双精度型#includec1-1.h//在此命令之前要定义ElemType的类型#includebo1-1.cpp//在此命令之前要包括c1-1.h文件(因为其中定义了Triplet)voidmain(){TripletT;ElemTypem;Statusi;i=InitTriplet(T,5,7,9);//i=InitTriplet(T,5.0,7.1,9.3);//当ElemType为双精度型时,可取代上句printf(调用初始化函数后,i=%d(1:成功)T的三个值为:,i);coutT[0]''T[1]''T[2]endl;//为避免ElemType的类型变化的影响,用cout取代printf()。注意结尾要加endli=Get(T,2,m);if(i==OK)coutT的第2个值为:mendl;5i=Put(T,2,6);if(i==OK)cout将T的第2个值改为6后,T的三个值为:T[0]''T[1]''T[2]endl;i=IsAscending(T);//此类函数实参与ElemType的类型无关,当ElemType的类型变化时,实参不需改变printf(调用测试升序的函数后,i=%d(0:否1:是)\n,i);i=IsDescending(T);printf(调用测试降序的函数后,i=%d(0:否1:是)\n,i);if((i=Max(T,m))==OK)//先赋值再比较coutT中的最大值为:mendl;if((i=Min(T,m))==OK)coutT中的最小值为:mendl;DestroyTriplet(T);//函数也可以不带回返回值cout销毁T后,T=T(NULL)endl;}四、实验结果(截图)6五、实验总结通过本次上机实验我们熟悉VisualC++语言的上机环境,掌握C语言的基本结构,理解抽象数据类型的表示和实现。在实验中也遇到了一些问题,最为突出的是,书本上的知识与老师的讲解都比较容易理解,但是当自己采用刚学的知识点编写程序时却感到十分棘手,有时表现在想不到适合题意的算法,有时表现在算法想出来后,只能将书本上原有的程序段誊写到自己的程序中再加以必要的连接以完成程序的编写,在以后的学习中应当加强对知识的理解和熟练程度,努力做到学以致用。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功