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