实验二 抽象数据类型的表 示和实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Triplet T; ElemTyห้องสมุดไป่ตู้e e; int i;
InitTriplet(T, 1, 2, 3); printf("构造三元组T,依次置T的3个元素的初值为:T[0]=%d,
T[1]=%d, T[2]=%d\n", T[0], T[1], T[2]); printf("\n");
Get(T, 2, e); printf("三元组T的第2个值为:%d\n", e) ;
一个含抽象数据类型的软件模块通常应包含定义、表示和实现3个部 分。抽象数据类型通常采用以下格式定义:
ADT抽象数据类型名 { 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义>
} ADT抽象数据类型名 (2)三元组的抽象数据类型定义及表示
我们以抽象数据类型三元组为例,说明抽象数据类型是如何定义 的。三元组实际上就是一个数据对象中有3个数据元素。三元组中元素 的数据类型,可以是整型数,也可以是字符、浮点数或者更复杂的数据 类型。
if(T[i]<min) min=T[i];
e=min; }
IsAscending(T,i); printf("i=%d (i=1:按升序排列;i=0:不按升序排列)\n", i);
IsDecending(T,i); printf("i=%d (i=1:按降序排列;i=0:不按降序排列)\n", i);
DestroyTriplet(T); printf("销毁三元组T后,T=%d\n", T); }
浙江大学城市学院实验报告
课程名称
数据结构基础
实验项目名称 实验二 抽象数据类型的表示和实现
学生姓名 专业班级 学号
实验成绩 指导老师(签名 )
日期 2014-10-9
1. 实验目的和要求 1、通过抽象数据类型三元组的表示和实现,了解抽象数据类型的定义
方式。 2、掌握抽象数据类型的定义方式和用C语言实现的方法。 3、熟悉如何运用主函数检验各基本操作函数的正确性的具体操作。
2. 实验内容 1、 认真阅读以下有关抽象数据类型的知识: (1)抽象数据类型的概念
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部 如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性 不变,就不影响其外部的使用。
Put(T, 1, 3); printf("将第一个值改为3后的三元组T的3个值为:%d, %d, %d\n", T[0], T[1], T[2]) ;
Put(T, 3, 1); printf("将第三个值改为1后的三元组T的3个值为:%d, %d, %d\n", T[0], T[1], T[2]) ;
if(T[0]>T[1]&&T[1]>T[2]) i=1;
else i=0; }
void Put(Triplet &T,int i,ElemType e) {//初始条件:三元组T已存在,1≤i≤3;操作结果:改变T的第i元的值为e
if(i>=1&&i<=3) T[i-1]=e;
}
void Max(Triplet T,ElemType &e) {//初始条件:三元组T已存在;操作结果:用e返回T的三个元素中的最大 值
test1_2.h: int InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3) {// 操作结果:构造三元组T,依次置T的3个元素的初值为v1,v2和v3
if (!(T=(ElemType *) malloc (3*sizeof(ElemType)))) exit(0);
以下是三元组的抽象数据类型定义:
ADT Triplet{ 数据对象:D={e1, e2, e3 | e1, e2, e3∈ElemSet (ElemSet为某个数
据对象的集合)} 数据关系:R1={<e1, e2>, <e2, e3>} 基本操作: InitTriplet(&T, v1, v2, v3) 操作结果:构造三元组T,元素e1, e2和e3分别被赋以v1, v2, v3值 DestroyTriplet(&T) 操作结果:三元组T被销毁 Get(T, i, &e) 初始条件:三元组T已存在,1≤i≤3 操作结果:用e返回T的第i元的值 IsAscending(T) 初始条件:三元组T已存在 操作结果:如果T的三个元素按升序排列,则返回1,否则返回0 IsDecending(Triplet T); 初始条件: 三元组T已存在 操作结果: 如果T的三个元素按降序排列,则返回1,否则返回0 Put(&T, i, e) 初始条件:三元组T已存在,1≤i≤3 操作结果:改变T的第i元的值为e Max(T, &e) 初始条件:三元组T已存在 操作结果:用e返回T的三个元素中的最大值 Min(T, &e) 初始条件:三元组T已存在 操作结果:用e返回T的三个元素中的最小值
int i,max; max=T[0]; for(i=0;i<=2;i++)
if(T[i]>max) max=T[i];
e=max; }
void Min(Triplet T,ElemType &e) {//初始条件:三元组T已存在;操作结果:用e返回T的三个元素中的最小 值
int i,min; min=T[0]; for(i=0;i<=2;i++)
{ // 操作结果:构造三元组T,依次置T的3个元素的初值为v1,v2和
v3
if (!(T=(ElemType *) malloc (3*sizeof(ElemType)))) //申请空间
exit(0);
// 申请空间失败,退出
T[0]=v1; T[1]=v2; T[2]=v3;
return 1;
if(i>=1&&i<=3) e=T[i-1];
}
void IsAscending(Triplet T,int &i) {//初始条件:三元组T已存在;操作结果:如果T的三个元素按升序排 列,则返回1,否则返回0
if(T[0]<T[1]&&T[1]<T[2]) i=1;
else i=0; }
void IsDecending(Triplet T,int &i) {//初始条件: 三元组T已存在;操作结果: 如果T的三个元素按降序排列, 则返回1,否则返回0
} ADT Triplet
三元组在计算机中的具体存储方式可以采用动态分配的顺序存储结 构,如图所示:
动态分配的顺序存储的三元组
2、 在计算机中实现上述三元组抽象数据类型。步骤如下: (1)首先搭好实现该抽象数据类型的整个C语言程序的模块框架结构
图,即在一个工程中分别建立两个文件:头文件test1_2.h与主程序文 件test1_2.cpp。 (2)编写test1_2.h和test1_2.cpp两个文件,其中test1_2.h中包含三 元组的各种操作函数的实现,test1_2.cpp中包含三元组存储结构定义 与主函数,主函数主要用于验证test1_2.h中各函数的正确性。编译并 调试程序,直到正确运行。
3、填写实验报告,实验报告文件取名为report2.doc。
4、上传实验报告文件report2.doc 、源程序文件test1_2.cpp及 test1_2.h到Ftp服务器上自己的文件夹下。
三. 函数的功能说明及算法思路
int InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3)
T[0]=v1; T[1]=v2; T[2]=v3; return 1; }
void DestroyTriplet(Triplet &T) {// 操作结果:三元组T被销毁
free(T); T=NULL; return; }
void Get(Triplet T,int i,ElemType &e) {//初始条件:三元组T已存在,1≤i≤3;操作结果:用e返回T的第i元的 值
Max(T, e); printf("三元组T的最大值为:%d\n", e) ;
Min(T, e); printf("三元组T的最小值为:%d\n", e);
IsAscending(T,i); printf("i=%d (i=1:按升序排列;i=0:不按升序排列)\n", i);
IsDecending(T,i); printf("i=%d (i=1:按降序排列;i=0:不按降序排列)\n", i); printf("\n");
结果都正确
五. 心得体会 “&”的使用还需要多加练习
【附录----源程序】
test1_2.cpp: #include <iostream.h> #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef ElemType *Triplet; //定义动态分配的三元组类型, 指针Triplet #include "test1_2.h" void main() {
// 返回1,则成功
}
void Put(Triplet &T,int i,ElemType e) {//初始条件:三元组T已存在,1≤i≤3;操作结果:改变T的第i元的值为e
if(i>=1&&i<=3) T[i-1]=e;
//改变T的第i元的值,e为改变的数据,将其值赋给T的第i元的值 }
四. 实验结果与分析
InitTriplet(T, 1, 2, 3); printf("构造三元组T,依次置T的3个元素的初值为:T[0]=%d,
T[1]=%d, T[2]=%d\n", T[0], T[1], T[2]); printf("\n");
Get(T, 2, e); printf("三元组T的第2个值为:%d\n", e) ;
一个含抽象数据类型的软件模块通常应包含定义、表示和实现3个部 分。抽象数据类型通常采用以下格式定义:
ADT抽象数据类型名 { 数据对象:<数据对象的定义> 数据关系:<数据关系的定义> 基本操作:<基本操作的定义>
} ADT抽象数据类型名 (2)三元组的抽象数据类型定义及表示
我们以抽象数据类型三元组为例,说明抽象数据类型是如何定义 的。三元组实际上就是一个数据对象中有3个数据元素。三元组中元素 的数据类型,可以是整型数,也可以是字符、浮点数或者更复杂的数据 类型。
if(T[i]<min) min=T[i];
e=min; }
IsAscending(T,i); printf("i=%d (i=1:按升序排列;i=0:不按升序排列)\n", i);
IsDecending(T,i); printf("i=%d (i=1:按降序排列;i=0:不按降序排列)\n", i);
DestroyTriplet(T); printf("销毁三元组T后,T=%d\n", T); }
浙江大学城市学院实验报告
课程名称
数据结构基础
实验项目名称 实验二 抽象数据类型的表示和实现
学生姓名 专业班级 学号
实验成绩 指导老师(签名 )
日期 2014-10-9
1. 实验目的和要求 1、通过抽象数据类型三元组的表示和实现,了解抽象数据类型的定义
方式。 2、掌握抽象数据类型的定义方式和用C语言实现的方法。 3、熟悉如何运用主函数检验各基本操作函数的正确性的具体操作。
2. 实验内容 1、 认真阅读以下有关抽象数据类型的知识: (1)抽象数据类型的概念
抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。 抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部 如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性 不变,就不影响其外部的使用。
Put(T, 1, 3); printf("将第一个值改为3后的三元组T的3个值为:%d, %d, %d\n", T[0], T[1], T[2]) ;
Put(T, 3, 1); printf("将第三个值改为1后的三元组T的3个值为:%d, %d, %d\n", T[0], T[1], T[2]) ;
if(T[0]>T[1]&&T[1]>T[2]) i=1;
else i=0; }
void Put(Triplet &T,int i,ElemType e) {//初始条件:三元组T已存在,1≤i≤3;操作结果:改变T的第i元的值为e
if(i>=1&&i<=3) T[i-1]=e;
}
void Max(Triplet T,ElemType &e) {//初始条件:三元组T已存在;操作结果:用e返回T的三个元素中的最大 值
test1_2.h: int InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3) {// 操作结果:构造三元组T,依次置T的3个元素的初值为v1,v2和v3
if (!(T=(ElemType *) malloc (3*sizeof(ElemType)))) exit(0);
以下是三元组的抽象数据类型定义:
ADT Triplet{ 数据对象:D={e1, e2, e3 | e1, e2, e3∈ElemSet (ElemSet为某个数
据对象的集合)} 数据关系:R1={<e1, e2>, <e2, e3>} 基本操作: InitTriplet(&T, v1, v2, v3) 操作结果:构造三元组T,元素e1, e2和e3分别被赋以v1, v2, v3值 DestroyTriplet(&T) 操作结果:三元组T被销毁 Get(T, i, &e) 初始条件:三元组T已存在,1≤i≤3 操作结果:用e返回T的第i元的值 IsAscending(T) 初始条件:三元组T已存在 操作结果:如果T的三个元素按升序排列,则返回1,否则返回0 IsDecending(Triplet T); 初始条件: 三元组T已存在 操作结果: 如果T的三个元素按降序排列,则返回1,否则返回0 Put(&T, i, e) 初始条件:三元组T已存在,1≤i≤3 操作结果:改变T的第i元的值为e Max(T, &e) 初始条件:三元组T已存在 操作结果:用e返回T的三个元素中的最大值 Min(T, &e) 初始条件:三元组T已存在 操作结果:用e返回T的三个元素中的最小值
int i,max; max=T[0]; for(i=0;i<=2;i++)
if(T[i]>max) max=T[i];
e=max; }
void Min(Triplet T,ElemType &e) {//初始条件:三元组T已存在;操作结果:用e返回T的三个元素中的最小 值
int i,min; min=T[0]; for(i=0;i<=2;i++)
{ // 操作结果:构造三元组T,依次置T的3个元素的初值为v1,v2和
v3
if (!(T=(ElemType *) malloc (3*sizeof(ElemType)))) //申请空间
exit(0);
// 申请空间失败,退出
T[0]=v1; T[1]=v2; T[2]=v3;
return 1;
if(i>=1&&i<=3) e=T[i-1];
}
void IsAscending(Triplet T,int &i) {//初始条件:三元组T已存在;操作结果:如果T的三个元素按升序排 列,则返回1,否则返回0
if(T[0]<T[1]&&T[1]<T[2]) i=1;
else i=0; }
void IsDecending(Triplet T,int &i) {//初始条件: 三元组T已存在;操作结果: 如果T的三个元素按降序排列, 则返回1,否则返回0
} ADT Triplet
三元组在计算机中的具体存储方式可以采用动态分配的顺序存储结 构,如图所示:
动态分配的顺序存储的三元组
2、 在计算机中实现上述三元组抽象数据类型。步骤如下: (1)首先搭好实现该抽象数据类型的整个C语言程序的模块框架结构
图,即在一个工程中分别建立两个文件:头文件test1_2.h与主程序文 件test1_2.cpp。 (2)编写test1_2.h和test1_2.cpp两个文件,其中test1_2.h中包含三 元组的各种操作函数的实现,test1_2.cpp中包含三元组存储结构定义 与主函数,主函数主要用于验证test1_2.h中各函数的正确性。编译并 调试程序,直到正确运行。
3、填写实验报告,实验报告文件取名为report2.doc。
4、上传实验报告文件report2.doc 、源程序文件test1_2.cpp及 test1_2.h到Ftp服务器上自己的文件夹下。
三. 函数的功能说明及算法思路
int InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3)
T[0]=v1; T[1]=v2; T[2]=v3; return 1; }
void DestroyTriplet(Triplet &T) {// 操作结果:三元组T被销毁
free(T); T=NULL; return; }
void Get(Triplet T,int i,ElemType &e) {//初始条件:三元组T已存在,1≤i≤3;操作结果:用e返回T的第i元的 值
Max(T, e); printf("三元组T的最大值为:%d\n", e) ;
Min(T, e); printf("三元组T的最小值为:%d\n", e);
IsAscending(T,i); printf("i=%d (i=1:按升序排列;i=0:不按升序排列)\n", i);
IsDecending(T,i); printf("i=%d (i=1:按降序排列;i=0:不按降序排列)\n", i); printf("\n");
结果都正确
五. 心得体会 “&”的使用还需要多加练习
【附录----源程序】
test1_2.cpp: #include <iostream.h> #include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef ElemType *Triplet; //定义动态分配的三元组类型, 指针Triplet #include "test1_2.h" void main() {
// 返回1,则成功
}
void Put(Triplet &T,int i,ElemType e) {//初始条件:三元组T已存在,1≤i≤3;操作结果:改变T的第i元的值为e
if(i>=1&&i<=3) T[i-1]=e;
//改变T的第i元的值,e为改变的数据,将其值赋给T的第i元的值 }
四. 实验结果与分析