实验报告:抽象数据类型的表现和实现
实验内容
基本要求:
设计实现抽象数据类型“三元组”,要求动态分配内存。每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组等。
/* Auther: XDate:2020/2/15Description: 数据结构与算法*实验一*抽象数据结构 */
#include<stdio.h>
#define OK 1
#define ERROR 0
typedef int status;typedef float Elemtype;
typedef int Status;typedef struct
{Elemtype e[3];}Triplet;//初始化三元组;
Status InitTriplet(Triplet &T,Elemtype v0,Elemtype v1,Elemtype v2)
{T.e[0]=v0;T.e[1]=v1;T.e[2]=v2;return OK;
}// 取三元组中第i个值赋值给e
Status Put(Triplet T,Status i,Elemtype &e)
{if(i<1||i>3)return ERROR;elsee=T.e[i-1];return OK;}//取三元组中最大值赋值给e
Status Getmax(Triplet &T,Status i,Elemtype &e)
{e=T.e[0];for(i=0;i<3;i++)if(T.e[i]>e)e=T.e[i];return OK;
}//取三元组中最小值赋值给e
Status Getmin(Triplet &T,Status i,Elemtype &e)
{e=T.e[0];for(i=0;i<3;i++)if(T.e[i]<e)e=T.e[i];return OK;
}//输出三元组的三个值;
Status ShowTriplet(Triplet &T,Status i)
{if(i<1||i>3)return ERROR;elseprintf("三元组的3个值为:");for(i=0;i<3;i++)printf("%2f",T.e[i]);return OK; } //判断三元组中的值是否为升序;
Status IsAscending(Triplet &T)
{return((T.e[0]<T.e[1])&&(T.e[1]<T.e[2]));//升序则返回1,否则返回0;
}//判断三元组中的值是否为降序;;
Status IsDescending(Triplet &T)
{return((T.e[0]>T.e[1])&&(T.e[1]>T.e[2]));//降序则返回1,否则返回0; } //输出三元组中数值的乘积;
Status GetProduct(Triplet &T,Status i,Elemtype &e)
{e=T.e[0]*T.e[1]*T.e[2];return OK;} //销毁三元组;
Status Destory(Triplet &T)
{return OK;} int main()
{Triplet T;Status i,flag;Elemtype v0,v1,v2,e;printf("输入三元组的值:\n");scanf("%f %f %f",&v0,&v1,&v2);flag=InitTriplet(T,v0,v1,v2);printf("初始化函数后,flag=%d\n,",flag);printf("三元组中三个值分别为:%4.2f,%4.2f,%4.2f\n",T.e[0],T.e[1],T.e[2]);Put(T,i,e);printf("取三元组中第i个值赋值给e:%d\n ",e);Getmax(T,i,e);printf("输出三元组中的最大值:%f\n",e);Getmin(T,i,e);printf("输出三元组中的最小值:%f\n",e);if (IsAscending(T))printf("三元组是升序") ;if(IsDescending(T)) printf("三元组是降序");GetProduct(T,i,e);printf("输出三元组三个元素值的成绩:%f%f%f\n",T.e[0],T.e[1],T.e[2]);flag=Destory(T);printf("销毁三元组T成功:flag=%d\n",flag);return OK;}
三元组相比上学期的指针在功能上更加丰富,且更易理解。
同时更加从系统角度出发,例如typedef int Status;可以是系统更容易修改数值的数据类型