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

 主要功能:构造三元组;销毁三元组;用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 }

 

上一篇:334. Increasing Triplet Subsequence(也可以使用dp动态规划)


下一篇:triplet