三元组的使用
最近在学习严蔚敏编著的数据结构(C语言版)发现很多人对数据结构这么科目的掌握很费劲,数据结构作为一种重要的思想对我们整个编程生涯会产生不小的影响,因此笔者在进行了一段时间的学习后,决定将自己的学习心得和代码分享出来,以供更多的读者来学习。因为笔者主要从事安卓的开发,因此对于安卓和Java开源的精神所深深的打动,知识是用来共享的,经验是用来共同进步的。希望读者们在看完之后能对自己的数据结构有一定的帮助这是第一个示例,会在过年前更新完每章最基础最常用的示例代码,希望大家广泛传播和学习。
<span style="font-size:10px;"> </span><pre name="code" class="html">/*设计实现抽象数据类型三元组 (Triplet) 。
每个三元组由任意三个实数的序列构成,基本操作包括:
创建一个三元组,取三元组的任意一个分量,置三元组
的任意一个分量,求三元组的最大分量、最小分量,
显示三元组,销毁三元组等。
方法1:用结构体封装需要定义的数据类型,如定义三元组ADT时,
首先用结构体封装“三元组”的三个分量。
并利用typedef对结构体重新命名。
*/
#include<stdio.h> //引入库
#include<stdlib.h> //引入库
typedef int Status; //给int型起个别名为status
typedef float ElemType; //给float型起个别名为ElemType
//建立一个结构体,起名为Triplet
typedef struct{
ElemType e[3];
}Triplet;
//构造一个三元组,元素e1,e2,e3分别被赋以参数v1,v2,.v3的值
Status InitTriplet(Triplet &T,Status v1,Status v2,Status v3)
{
T.e[0]=v1; //赋值
T.e[1]=v2; //赋值
T.e[2]=v3; //赋值
return 0;
}
//打印三元组
Status printElem(Triplet T)
{
printf("三元组为:\n");
printf("%f,%f,%f",T.e[0],T.e[1],T.e[2]);
printf("\n");
}
//取出三元组中第i个元素的值
Status GetElem(Triplet T,Status i,ElemType &e)
{
printf("请输入你想打印的三元组中的第几个元素的值:\n");
scanf("%d",&i);
switch(i){
case 1:
printf("三元组的第一个数=%f",T.e[i-1]);break;
case 2:
printf("三元组的第二个数=%f",T.e[i-1]);break;
case 3:
printf("三元组的第三个数=%f",T.e[i-1]);break;
}
}
//获取三元组中的最大值
Status getMax(Triplet T,ElemType &e)
{
if(T.e[0]>T.e[1]){
e=T.e[0];
}
else{
e=T.e[1];
}
if(T.e[2]>e){
e=T.e[2];
}
return e;
}
//获取三元组中的最小值
Status getMin(Triplet T,ElemType &e)
{
if(T.e[0]<T.e[1])
e=T.e[0];
else
e=T.e[1];
if(T.e[2]<e)
e=T.e[2];
return e;
}
//改变三元组中的第i元的值为e
Status PutElem(Triplet &T,Status i,ElemType e)
{
printf("请输入你想改变的三元组中的第几个元素的值:");
printf("(你将会把你所选的元素变成10)\n");
scanf("%d",&i);
if(i<1||i>3){ //加入if语句 用来判断i是不是在1-3内 用来增强代码的健壮性
return 0;
}
T.e[i-1]=e; //对第i的元素赋值e
printf("改变后的新的三元组的值为:");
printElem(T);
return 0;
}
//三元组T被销毁
Status DestoryTriplet(Triplet &T){
return 1;
}
Status main()
{
Status v0,v1,v2;
Status i;
ElemType e;
Triplet T;
printf("请给三元组赋值v0,v1,v2(每个数用逗号个隔开):\n");
scanf("%d,%d,%d",&v0,&v1,&v2);
InitTriplet(T,v0,v1,v2); //InitTriplet(&T,v0,v1,v2); //建立三元组并赋值
printElem(T); //打印三元组
GetElem(T,i,e); //GetElem(T,i,&e); //取出三元组中第i个元素的值
printf("\n");
printf("三元组最大值为:%d",getMax(T,e));//printf("三元组最大值为:%f",getMax(T,&e)); //获取三元组中的最大值
printf("\n");
printf("三元组最小值为:%d",getMin(T,e));//printf("三元组最小值为:%f",getMin(T,&e)); //获取三元组的最小值
printf("\n");
PutElem(T,i,e); //PutElem(&T,i,e); //改变三元组中的第i元的值为e
DestoryTriplet(T); //DestoryTriplet(&T); //三元组T被销毁
system("pause");
return 0;
}