抽象数据类型三元组的定义

匿名 (未验证) 提交于 2019-12-02 23:49:02
 主要功能:构造三元组;销毁三元组;用e返回T的第i元的值;置T的第i元的值为e;判断是否为升序排列;判断是否为降序排列;求最大值;求最小值;显示三元组。  1 #include <stdio.h>   2 #include <stdlib.h>   3 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<自定义数据类型<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    4 typedef int Status;   5 typedef int ElemType;   6 typedef ElemType *Triplet;   7 #define OVERFLOW -2   8 #define OK 1   9 #define ERROR 0   10 //---------------------------------------------构造三元组T-----------------------------------------------  11 Status InitTriplet(Triplet &T,ElemType v1,ElemType v2,ElemType v3)  12 {//构造三元组T,依此置T的三个元素的初值为v1,v2,v3   13     T=(ElemType*)malloc(3*sizeof(ElemType));//分配三个元素的存储空间  14     if(!T) exit(OVERFLOW);//分配存储空间失败  15     T[0] =v1; T[1]=v2; T[2]=v3;  16     return OK;  17  }   18 //--------------------------------------------销毁三元组T------------------------------------------------   19 Status DestroyTriplet(Triplet &T)  20 {  21     free(T);  22     T=NULL;  23     return OK;   24 }  25 //---------------------------------------用e返回T的第i元的值----------------------------------------------  26 Status Get(Triplet T,int i,ElemType e)  27 {  28     if(i<1||i>3) return ERROR;  29     e=T[i-1];  30     return e;  31  }   32  //------------------------------------置T的第i元的值为e--------------------------------------------------  33  Status Put(Triplet T,int i,ElemType e)  34  {  35      if(i<1||i>3) return ERROR;  36      T[i-1]=e;  37      return OK;  38   }   39 //----------------------------------升序排列返回1,否则返回0----------------------------------------------------  40 Status IsAscending(Triplet T)  41 {  42     return (T[0]<=T[1])&&(T[1]<=T[2]);  43  }   44 //---------------------------------降序排列返回1,否则返回0-----------------------------------------------------  45 Status IsDescending(Triplet T)  46 {  47     return (T[0]>=T[1])&&(T[1]>=T[2]);  48  }   49 //---------------------------------------用e返回最大值--------------------------------------------------------  50 Status Max(Triplet T,ElemType &e)  51 {  52     e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]);  53     return e;  54  }   55 //----------------------------------------用e返回最小值-------------------------------------------------   56 Status Min(Triplet T,ElemType &e)  57 {  58     e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]);  59     return e;  60 }  61 //-----------------------------------------显示三元组---------------------------------------------------   62 Status Print(Triplet T)  63 {  64     printf("%d %d %d",T[0],T[1],T[2]);  65     return OK;  66 }  67 //------------------------------------------主函数---------------------------------------------------------  68 main()  69 {  70     Triplet T;  71     ElemType e,v1,v2,v3;  72     int i,k,m;  73     printf("请输入v1,v2,v3的值(用空格隔开):");  74     scanf("%d %d %d",&v1,&v2,&v3);   75     InitTriplet(T,v1,v2,v3);  76     printf("功能选择:\n");  77     printf("1.用e返回T的第i元的值;\n");  78     printf("2.置T的第i元的值为e;\n");  79     printf("3.是否为升序排列;\n");  80     printf("4.是否为降序排列;\n");  81     printf("5.显示最大值;\n");  82     printf("6.显示最小值;\n");  83     printf("7.显示三元组;\n");  84     printf("8.销毁三元组;\n");  85     printf("9.结束\n");  86     for(int num=1;;num++)  87     {  88         printf("\n---------------------\n");  89         printf("请输入所选功能:");  90         scanf("%d",&k);  91         if(k==1)  92         {  93             printf("请输入i值:");  94             scanf("%d",&i);  95             m=Get(T,i,e);  96             printf("%d",m);  97         }  98         if(k==2)  99         { 100             printf("请输入i,e值(用空格隔开)"); 101             scanf("%d %d",&i,&e);  102             Put(T,i,e); 103         } 104         if(k==3) 105         { 106         m=IsAscending(T); 107         if(m==1) 108         printf("是"); 109         else printf("否");  110     } 111         if(k==4) 112         { 113         m=IsDescending(T); 114         if(m==1) 115         printf("是"); 116         else printf("否"); 117         }  118         if(k==5) 119         { 120         m=Max(T,e); 121         printf("%d",m); 122     } 123         if(k==6) 124         { 125         m=Min(T,e); 126         printf("%d",m); 127     } 128         if(k==7) 129         Print(T); 130         if(k==8) 131         DestroyTriplet(T); 132         if(k==9) 133         break; 134     } 135  } 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!