国脉信息学院数据结构实验报告
____09____级 ____x____班 ___2011___年__x月__xx___日 姓名__ xxxxx____ 学号 ___xxxx___ 得分_____________ 1.实验题目
实现创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操作。 2.需求分析
本演示程序用vC 编写,完成三元组的生成,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操
① 输入的形式和输入值的范围:创建一个三元组时需要输入三元组元素的值;取三元组的任意一个分量时输入所取元素的位置;置三元组的任意一个分量时输入需要置的元素的位置以及所置的值。在所有输入中,元素的值都是整数
② 输出的形式:在所有操作中都显示操作提示以及操作后三元组的内容。其中:创建一个三元组操作后显示该三元组;完成取三元组的任意一个分量求三元组的最大分量,求三元组的最小分量操作后符合要求元素的值,完成置三元组的任意一个分量后显示操作后的三元组。
③ 程序所能达到的功能:完成三元组的创建,取三元组的任意一个
元素,置三元组的任意一个分量,得到三元组的最大值与最小值,
显示三元组等 ④ 测试数据:
A .创建三元组操作中依次输入随意的三个整型数生成一个三元组T
B .取三元组中的分量操作中输入元素的位序,返回所取元素在
三元组中的位置及它的值
C .置换三元组中的元素操作输入要置换元素在三元组中的位序
及置换后新的元素值,返回置换后新的三元组
D .完成前面的操作后会自动的显示出新的三元组中最大值元素
和最小值元素
E .最后销毁三元组 3.概要设计
1)为了实现上述程序功能,需要定义三元组的抽象数据类型: ADT Triplett {
数据对象:D={e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合) }
数据关系:R={ } 基本操作:
InitTriplet(T, v1, v2, v3)
操作结果:构造了三元组T ,元素e1,e2和e3分别被赋以
参数v1,v2和v3的值。
DestroyTriplet(T)
操作结果:三元组T 被销毁。 Get(T, i,e)
初始条件:三元组T 已存在,0
初始条件:三元组T 已存在0
若存在,返回元素在表中的位置;若不存在,返回-1. Max(T,e)
初始条件:三元组T 已存在
操作结果:用e 返回T 的3个元素中的最大值。 Min(T,e)
初始条件:三元组T 已存在
操作结果:用e 返回T 的3个元素中的最小值。 Print(T)
初始条件:三元组T 已存在
操作结果:打印三元组T 的各个元素值 2)本程序包含7个函数: ① 主函数main()
② 初始化三元组函数 InitTriplet () ③ 销毁三元组函数DestroyTriplet () ④ 取三元组元素函数Get ()
⑤ 置三元组元素函数Put () ⑥ 求最大值函数Max ()
⑦ 求最小值函数Min () ⑧ 打印三元组函数Print() 各函数间关系如下:
1、 其中主函数main ()需调用函数 ②初始化三元组函数、 ③销毁三元组函数、 ④取三元组元素函数、 ⑤置三元组元素函数、 ⑥求最大值函数、 ⑧打印三元组函数、 ⑦求最小值函数; 2、 函数 ③销毁三元组函数、 ④取三元组元素函数、 ⑤置三元组元素函数、 ⑦求最小值函数、 ⑧打印三元组函数、 ⑥求最大值函数, 都必须先执行函数 ②初始化三元组函数使得三元组存在。 4.详细设计 具体程序设计如下: #include #include #include #define overflow -2 #define OK 1 #define ERROR 0 typedef int status; typedef int ElemType;
typedef ElemType *Triplet;
int InitTriplet(Triplet *T,int v1,int v2,int v3){
//构造三元组T ,依次置T 的三个元素初值为v1,v2,v3 (*T)=(int *)malloc(3 *sizeof(int)); if(!T) exit(overflow);
(*T)[0]=v1;(*T)[1]=v2;(*T)[2]=v3; return OK; }
int DestroyTriplet(Triplet *t){ //销毁三元组T free(*t); *t=NULL; return OK; }
int Get(Triplet t,int i,int *e){
//取三元组的任意一个分量, 用e 返回t 的第i 元素的值 if(i3) return ERROR; *e=t[i-1]; return OK; }
int Put(Triplet *t,int i,int e){ //置t 的第i 元素的值为e
if(i3) return ERROR; (*t)[i-1]=e; return OK; }
int Max(Triplet T,int *e){ //用e 返回T 的最大元素的值
*e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]); return OK; }
int Min(Triplet T,int *e){ //用e 返回T 的最小元素的值
*e=(T[0]
void Print(Triplet T){ //打印三元组T 的各个元素值 int i;
ElemType elem,*p=&elem; for(i=1;i
printf(" T[%d]=%d\n",i,elem); }
}
void main(){ Triplet T,*t=&T; int e1,e2,e3,e,*p=&e; int i;
printf("\n请输入三元组元素e1 e2 e3:\n"); scanf("%d %d %d",&e1,&e2,&e3); printf("输出的三元组为:\n"); InitTriplet(t,e1,e2,e3);
Print(T);//初始化三元组T 并打印
printf("\n请输入需要取的三元组分量的位序i:"); scanf("%d",&i); if(i>=1&&i
printf("\n三元组T 中第%d个元素是:%d\n",i,*p); } else
printf("输入不正确\n");
printf("\n请输入需要置换的三元组分量的位序i:"); scanf("%d",&i); if(i>=1&&i
printf("\n请输入要置换成的新的元素为:");
scanf("%d",&e); Put(t,i,e);
printf("\n置换后新的三元组T 为:\n");
Print(T); }
else {printf("输入不正确!\n"); } Max(T,p);
printf("\n最大值为: %d\n",e); Min(T,p);
printf("\n最小值为: %d\n",e);
DestroyTriplet(t); }
5.调试分析 遇到的问题:
a .调试过程中经常丢掉分号而出现错误提示 b .函数的返回值与函数类型不一致而造成错误 c .函数调用时实参的类型与形参的类型不一致造成错误 心得体会:
总的来说还是对以前的C 语言知识有些遗忘,基础不够扎实导致
所发的时间太多了 6.使用说明
程序名为Globals ,运行环境为VC ,每一步都有提示信息提示用户下一步的实现功能及它的操作输入, 当输入错误时有错误提示信息。
程序执行后显示:
7.测试结果
1). 构建三元组T 提示输入三元组的三个元素,结果显示如图所示
2) a 取三元组中的元素时提示输入位序,结果显示如图所示
b 当输入的位序i 不符要求是则返回“输入不正确的提示”
3) a 置换原三元组中的元素提示输入位序,结果显示如图所示
b 当输入的位序i 不符要求是则返回“输入不正确的提示”
4) 自动显示出三元组的最大值最小值,结果显示如图所示
国脉信息学院数据结构实验报告
____09____级 ____x____班 ___2011___年__x月__xx___日 姓名__ xxxxx____ 学号 ___xxxx___ 得分_____________ 1.实验题目
实现创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操作。 2.需求分析
本演示程序用vC 编写,完成三元组的生成,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组等基本操
① 输入的形式和输入值的范围:创建一个三元组时需要输入三元组元素的值;取三元组的任意一个分量时输入所取元素的位置;置三元组的任意一个分量时输入需要置的元素的位置以及所置的值。在所有输入中,元素的值都是整数
② 输出的形式:在所有操作中都显示操作提示以及操作后三元组的内容。其中:创建一个三元组操作后显示该三元组;完成取三元组的任意一个分量求三元组的最大分量,求三元组的最小分量操作后符合要求元素的值,完成置三元组的任意一个分量后显示操作后的三元组。
③ 程序所能达到的功能:完成三元组的创建,取三元组的任意一个
元素,置三元组的任意一个分量,得到三元组的最大值与最小值,
显示三元组等 ④ 测试数据:
A .创建三元组操作中依次输入随意的三个整型数生成一个三元组T
B .取三元组中的分量操作中输入元素的位序,返回所取元素在
三元组中的位置及它的值
C .置换三元组中的元素操作输入要置换元素在三元组中的位序
及置换后新的元素值,返回置换后新的三元组
D .完成前面的操作后会自动的显示出新的三元组中最大值元素
和最小值元素
E .最后销毁三元组 3.概要设计
1)为了实现上述程序功能,需要定义三元组的抽象数据类型: ADT Triplett {
数据对象:D={e1,e2,e3|e1,e2,e3∈ElemSet(定义了关系运算的某个集合) }
数据关系:R={ } 基本操作:
InitTriplet(T, v1, v2, v3)
操作结果:构造了三元组T ,元素e1,e2和e3分别被赋以
参数v1,v2和v3的值。
DestroyTriplet(T)
操作结果:三元组T 被销毁。 Get(T, i,e)
初始条件:三元组T 已存在,0
初始条件:三元组T 已存在0
若存在,返回元素在表中的位置;若不存在,返回-1. Max(T,e)
初始条件:三元组T 已存在
操作结果:用e 返回T 的3个元素中的最大值。 Min(T,e)
初始条件:三元组T 已存在
操作结果:用e 返回T 的3个元素中的最小值。 Print(T)
初始条件:三元组T 已存在
操作结果:打印三元组T 的各个元素值 2)本程序包含7个函数: ① 主函数main()
② 初始化三元组函数 InitTriplet () ③ 销毁三元组函数DestroyTriplet () ④ 取三元组元素函数Get ()
⑤ 置三元组元素函数Put () ⑥ 求最大值函数Max ()
⑦ 求最小值函数Min () ⑧ 打印三元组函数Print() 各函数间关系如下:
1、 其中主函数main ()需调用函数 ②初始化三元组函数、 ③销毁三元组函数、 ④取三元组元素函数、 ⑤置三元组元素函数、 ⑥求最大值函数、 ⑧打印三元组函数、 ⑦求最小值函数; 2、 函数 ③销毁三元组函数、 ④取三元组元素函数、 ⑤置三元组元素函数、 ⑦求最小值函数、 ⑧打印三元组函数、 ⑥求最大值函数, 都必须先执行函数 ②初始化三元组函数使得三元组存在。 4.详细设计 具体程序设计如下: #include #include #include #define overflow -2 #define OK 1 #define ERROR 0 typedef int status; typedef int ElemType;
typedef ElemType *Triplet;
int InitTriplet(Triplet *T,int v1,int v2,int v3){
//构造三元组T ,依次置T 的三个元素初值为v1,v2,v3 (*T)=(int *)malloc(3 *sizeof(int)); if(!T) exit(overflow);
(*T)[0]=v1;(*T)[1]=v2;(*T)[2]=v3; return OK; }
int DestroyTriplet(Triplet *t){ //销毁三元组T free(*t); *t=NULL; return OK; }
int Get(Triplet t,int i,int *e){
//取三元组的任意一个分量, 用e 返回t 的第i 元素的值 if(i3) return ERROR; *e=t[i-1]; return OK; }
int Put(Triplet *t,int i,int e){ //置t 的第i 元素的值为e
if(i3) return ERROR; (*t)[i-1]=e; return OK; }
int Max(Triplet T,int *e){ //用e 返回T 的最大元素的值
*e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]); return OK; }
int Min(Triplet T,int *e){ //用e 返回T 的最小元素的值
*e=(T[0]
void Print(Triplet T){ //打印三元组T 的各个元素值 int i;
ElemType elem,*p=&elem; for(i=1;i
printf(" T[%d]=%d\n",i,elem); }
}
void main(){ Triplet T,*t=&T; int e1,e2,e3,e,*p=&e; int i;
printf("\n请输入三元组元素e1 e2 e3:\n"); scanf("%d %d %d",&e1,&e2,&e3); printf("输出的三元组为:\n"); InitTriplet(t,e1,e2,e3);
Print(T);//初始化三元组T 并打印
printf("\n请输入需要取的三元组分量的位序i:"); scanf("%d",&i); if(i>=1&&i
printf("\n三元组T 中第%d个元素是:%d\n",i,*p); } else
printf("输入不正确\n");
printf("\n请输入需要置换的三元组分量的位序i:"); scanf("%d",&i); if(i>=1&&i
printf("\n请输入要置换成的新的元素为:");
scanf("%d",&e); Put(t,i,e);
printf("\n置换后新的三元组T 为:\n");
Print(T); }
else {printf("输入不正确!\n"); } Max(T,p);
printf("\n最大值为: %d\n",e); Min(T,p);
printf("\n最小值为: %d\n",e);
DestroyTriplet(t); }
5.调试分析 遇到的问题:
a .调试过程中经常丢掉分号而出现错误提示 b .函数的返回值与函数类型不一致而造成错误 c .函数调用时实参的类型与形参的类型不一致造成错误 心得体会:
总的来说还是对以前的C 语言知识有些遗忘,基础不够扎实导致
所发的时间太多了 6.使用说明
程序名为Globals ,运行环境为VC ,每一步都有提示信息提示用户下一步的实现功能及它的操作输入, 当输入错误时有错误提示信息。
程序执行后显示:
7.测试结果
1). 构建三元组T 提示输入三元组的三个元素,结果显示如图所示
2) a 取三元组中的元素时提示输入位序,结果显示如图所示
b 当输入的位序i 不符要求是则返回“输入不正确的提示”
3) a 置换原三元组中的元素提示输入位序,结果显示如图所示
b 当输入的位序i 不符要求是则返回“输入不正确的提示”
4) 自动显示出三元组的最大值最小值,结果显示如图所示