设计实现抽象数据类型“三元组”,要求动态分配内存

基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组。

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;//给int型起个别名为Status 
typedef float ElemType;//三元组的类型先定义为float,可以随时变换为别的类型 
typedef ElemType* Triplet;//定义指针指向Triplet 

//创建三元组T,依此置T的3个元素初值 
Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3){
 T = (ElemType*)malloc(3*sizeof(ElemType));//分配3个元素的存储空间 
 if(!T)
  exit (OVERFLOW);//分配空间失败 
 T[0]=v1; T[1]=v2; T[2]=v3;
 return OK;
}

//取出三元组中第i个元素的值 
Status Get(Triplet T,Status i,ElemType &e){
 if(i<1||i>3)
  return ERROR;
 else
  e=T[i-1];
 return OK;
}

//置三元组T的第i元的值为e 
Status Put(Triplet &T,Status i,ElemType e){
 if(i<1||i>3)
  return ERROR;
 else
  T[i-1]=e;
 return OK;
}

//求三元组的最大分量 
Status Max(Triplet T,ElemType &e){
 if(T[0]>T[1])
  e=T[0];
 else
  e=T[1];
 if(T[2]>e)
  e=T[2];
 return e;
}

//求三元组的最小分量 
Status Min(Triplet T,ElemType &e){
 if(T[0]<T[1])
  e=T[0];
 else
  e=T[1];
 if(T[2]<e)
  e=T[2];
 return e;
}

//显示三元组 
Status Print(Triplet T){
 printf("三元组为:\n");
 printf("%f %f %f",T[0],T[1],T[2]);
 printf("\n");
}

//销毁三元组 
Status DestroyTriplet(Triplet &T){
 free(T);
 T=NULL;
 return OK;
}

Status main()
{
 ElemType v1,v2,v3;
 Status i,n,flag;//n为循环,flag为操作序号 
 ElemType e,e1,e2;//e1=max,e2=min 
 Triplet T;
 
 printf("请给三元组V1,v2,v3赋值:\n");
 scanf("%f %f %f",&v1,&v2,&v3);
 
 InitTriplet(T,v1,v2,v3);
 Get(T,i,e);
 Put(T,i,e);
 printf("该程序可进行如下操作:1.求最大值。2.求最小值。3.输出所有数值。\n");

//利用循环进行操作 
 for(n=1; n<=3; n++)
{
 
 printf("请输入需操作序号\n");
 scanf("%d",&flag);
    if(flag==1)
   {
 e1=Max(T,e);
 printf("三元组最大值为:%f",e1);
 printf("\n\n");
   }
   
    if(flag==2)
  {
 e2=Min(T,e);
 printf("三元组最小值为:%f",e2);
 printf("\n\n");
 }
 
    if(flag==3)
 Print(T);
 }
 
 DestroyTriplet(T);
 return OK;
 }

猜你喜欢

转载自blog.csdn.net/qq_44473695/article/details/88866731