数据结构三元组1

国脉信息学院数据结构实验报告

____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) 自动显示出三元组的最大值最小值,结果显示如图所示


相关内容

  • 具有不同组成的镍钴锰三元材料的最新研究进展_陈鹏
  • 化 工 进 展 ·166· CHEMICAL INDUSTRY AND ENGINEERING PROGRESS 2016年第35卷第1期 具有不同组成的镍钴锰三元材料的最新研究进展 陈鹏,肖冠,廖世军 (广东省燃料电池重点实验室,广东省教育厅新能源技术重点实验室,华南理工大学化学与化工学院, 广州 ...

  • 化工进展-具镍钴锰三元材料的最新研究进展
  • 化 工 进 展 ·166· CHEMICAL INDUSTRY AND ENGINEERING PROGRESS 2016年第35卷第1期 具有不同组成的镍钴锰三元材料的最新研究进展 陈鹏,肖冠,廖世军 (广东省燃料电池重点实验室,广东省教育厅新能源技术重点实验室,华南理工大学化学与化工学院, 广州 ...

  • 三元乙丙橡胶EPDM
  • EPDM中文名:三元乙丙橡胶 英文全称:Ethylene-Propylene-Diene Monomer(简称:EPDM) 三元乙丙橡胶介绍 三元乙丙橡胶是乙烯.丙烯以及非共轭二烯烃的三元共聚物,1963年开始商业化生产.每年全世界的消费量是80万吨.EPDM最主要的特性就是其优越的耐氧化.抗臭氧和 ...

  • 基于三元组表表示的稀疏矩阵的快速转置算法及其改进
  • 基于三元组表表示的稀疏矩阵的快速转置算法及其改进 摘 要:介绍基于三元组表表示的稀疏矩阵的快速转置算法,此算法在转置前需要先确定原矩阵中各列第一个非零元在转置矩阵中的位置,在此使用2个数组作为辅助空间,为了减少算法所需的辅助空间,通过引入2个简单变量提出一种改进算法.该改进算法在时间复杂度保持不变的 ...

  • 经济发展:从二元结构到三元结构
  • 作者:郭勇 湖湘论坛 2004年07期 [中图分类号]F0[文献标识码]A[文章编号]1004-3160(2004)03-0024-04 一.传统发展路径:从二元结构到一元结构 二元结构理论是在第二次世界大战后对发展中国家一种经济现象的描述,这一现象在发展中国家也是普遍存在的."二元&qu ...

  • 指挥决策风险三元组模型的数据挖掘
  • 第3卷 第2期 2012年4月指挥信息系统与技术 CommandInformationSystemandTechnologyVol.3 No.2Apr.2012 ・理论与探索・ 指挥决策风险三元组模型的数据挖掘 吴禹力 郑有志 孙国亮 (海军指挥学院研究生管理大队 南京210016) 摘 要:指挥决 ...

  • 三元材料和锰酸锂:最具前景的锂电池正极材料
  • 1月3日,北京当升材料科技股份有限公司发布公告称,公司"高温型镍钴锰酸锂多元材料"被评为国家重点新产品,该产品是一款高温性能优异的锂电正极材料,具有高温循环及存储性能好.碱性残余低.自放电率低等特点,可以满足手机.笔记本电脑.平板电脑等消费类锂电池的需求,还可以适用于电动工具.电 ...

  • 离心水泵叶轮的三元流技术原理及应用
  • 离心水泵叶轮的三元流技术原理及应用 目前, 节能降耗已成为全国各行各业, 特别是高耗能企业的重要任务.我国已把节能降耗提到了国民经济发展非常重要的位置.离心泵是把原动机的机械能通过离心泵叶轮产生的离心力使液体产生动能, 从而达到输送液体的目的, 它广泛应用于国民经济的各个领域.因此, 通过优化离心泵 ...

  • 汽车尾气处理
  • 专利 (1)微小型不锈钢长纤维过滤毡 申请号: 90200802 摘要: 微小型不锈钢长纤维过滤毡用一根或多根不锈钢长纤维经有序或无序绕折排列并缠绕成任意形状.工艺简单.成本低,具有弹性.清洁度高,孔隙度可在大范围内调整.特别适用于各种管路的气体或液体高精度过滤,可用于医药生物行业中,这种纤维毡也能 ...