1、浙江大学城市学院实验报告课程名称 数据结构基础 实验项目名称 实验二 抽象数据类型的表示和实现 学生姓名 专业班级 学号 实验成绩 指导老师(签名 ) 日期 一. 实验目的和要求1、通过抽象数据类型三元组的表示和实现,了解抽象数据类型的定义方式。2、掌握抽象数据类型的定义方式和用 C 语言实现的方法。3、熟悉如何运用主函数检验各基本操作函数的正确性的具体操作。二. 实验内容1、 认真阅读以下有关抽象数据类型的知识:(1)抽象数据类型的概念 抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构
2、如何变化,只要它的数学特性不变,就不影响其外部的使用。一个含抽象数据类型的软件模块通常应包含定义、表示和实现 3 个部分。抽象数据类型通常采用以下格式定义:ADT 抽象数据类型名 数据对象:数据关系:基本操作: ADT 抽象数据类型名(2)三元组的抽象数据类型定义及表示我们以抽象数据类型三元组为例,说明抽象数据类型是如何定义的。三元组实际上就是一个数据对象中有 3 个数据元素。三元组中元素的数据类型,可以是整型数,也可以是字符、浮点数或者更复杂的数据类型。以下是三元组的抽象数据类型定义:ADT Triplet数据对象:D=e1, e2, e3 | e1, e2, e3ElemSet (Elem
3、Set 为某个数据对象的集合)数据关系:R1=, 基本操作:InitTriplet(初始条件: 三元组 T 已存在操作结果: 如果 T 的三个元素按降序排列,则返回 1,否则返回 0Put(typedef ElemType *Triplet;#include “test1_2.h“void main()Triplet T;ElemType m;int i,a,b,c,x,y,choice;while(choice!=0)system(“cls“);printf(“*n“);printf(“* 1.InitTriplet *n“);printf(“* 2.Get *n“); printf(“*
4、3.Put *n“);printf(“* 4.Max printf(“* 5.IsSort *n“); printf(“* 6.DestroyTriplet *n“);printf(“* 0.Exit *n“);printf(“*n“);printf(“nPlease enter: “);scanf(“%d“,switch(choice)case 1:system(“cls“);printf(“请输入三元组 T 中的三个元素: “);scanf(“%d %d %d“,i=InitTriplet(T,a,b,c);if(i=1)printf(“n 调用初始化函数成功!n“);printf(“n
5、三元组 T 中三个元素的值分别为 : “);printf(“T0=%d, T1=%d, T2=%dn“,T0,T1,T2);printf(“nn 请按任意键返回菜单!“);getchar();getchar();break;case 2:system(“cls“);while(1)printf(“请输入需要查找的三元组 T 中元素的下标: “);scanf(“%d“,if(x=0|x=1|x=2)Get(T,x,m);printf(“n 下标为%d 的元素 T%d=%dn“,x,x,m);break;elseprintf(“输入错误,请重新输入!nn“);printf(“nn 请按任意键返回菜
6、单!“);getchar();getchar();break;case 3:system(“cls“);printf(“三元组 T 中三个元素的值分别为: “);printf(“T0=%d, T1=%d, T2=%dnn“,T0,T1,T2);while(1)printf(“请输入需要改变的三元组 T 元素的下标及元素值:“);scanf(“%d%d“,if(x=0|x=1|x=2)Put(T,x,y);printf(“n 改变后三元组 T 中三个元素的值分别为 : “);printf(“T0=%d, T1=%d, T2=%dn“,T0,T1,T2);break;elseprintf(“输入错
7、误,请重新输入!nn“);printf(“nn 请按任意键返回菜单!“);getchar();getchar();break;case 4:system(“cls“);printf(“三元组 T 中三个元素的值分别为: “);printf(“T0=%d, T1=%d, T2=%dnn“,T0,T1,T2);Max(T,m);printf(“三元组 T 中的最大值为 MAX=%d, “,m);Min(T,m);printf(“最小值为 MIN=%dn“,m);printf(“nn 请按任意键返回菜单!“);getchar();getchar();break;case 5:system(“cls“
8、);printf(“三元组 T 中三个元素的值分别为: “);printf(“T0=%d, T1=%d, T2=%dnn“,T0,T1,T2);i=IsAscending(T);if(i)printf(“三元组 T 的三个元素是按升序排序,“);elseprintf(“三元组 T 的三个元素不是按升序排序,“);i=IsDecending(T);if(i)printf(“是按降序排序n“);elseprintf(“不是按降序排序n“);printf(“nn 请按任意键返回菜单!“);getchar();getchar();break;case 6:system(“cls“);printf(“三
9、元组 T 中三个元素的值分别为: “);printf(“T0=%d, T1=%d, T2=%dnn“,T0,T1,T2);DestroyTriplet(T);printf(“销毁三元组 T 后,T=%dn“,T);printf(“nn 请按任意键返回菜单!“);getchar();getchar();break;case 0:exit(0);test1_1.hint InitTriplet(Triplet T0=v1;T1=v2;T2=v3;return 1;void DestroyTriplet(Triplet T=NULL;return;void Get(Triplet T,int i,ElemType for(k=0;kTi)e=Ti;int IsAscending(Triplet for(i=0;iTi+1)return 0;return 1;int IsDecending(Triplet for(i=0;i2;i+)if(TiTi+1)return 0;return 1;