1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define ERROR 0
5 #define OK 1
6
7 typedef int Status;
8 typedef int Elemtype;
9 typedef Elemtype * Triplet;
10
11 Status InitTriplet(Triplet *t, Elemtype v0, Elemtype v1, Elemtype v2){ //三元组t的初始化
12
13 *t = (Elemtype *)malloc(3 * sizeof(Elemtype));
14 if (!*t)
15 exit(-1);
16
17 (*t)[0] = v0;
18 (*t)[1] = v1;
19 (*t)[2] = v2;
20
21 return OK;
22 }
23
24 Status DestroyTriplet(Triplet *t){//三元组t的释放 int* t=t
25
26 free(*t);
27 *t = NULL;
28 return OK;
29 }
30
31 Status Get(Triplet t, int i, Elemtype *e){//得到三元组t中的某个元素
32 if (i<1 || i>3 || t == NULL)
33 return ERROR;
34 *e = t[i - 1];
35 //printf("三元组中第%d个元素为%d\n",(i+1),t[i]);
36 return OK;
37 }
38
39 Status Put(Triplet t, int i, Elemtype e){
40 if (t == NULL)
41 return ERROR;
42 if (i<1 || i>3 || t == NULL)
43 return ERROR;
44 t[i] = e;
45 return OK;
46 }
47
48 Status Show(Triplet t){
49 if (t == NULL)
50 return ERROR;
51 for (int i = 0; i < 3; i++)
52 printf("第%d个元素为%d\n", i + 1, t[i]);
53 return OK;
54 }
55
56 Status isAscending(Triplet t){
57 if (t == NULL)
58 return ERROR;
59 return(t[0] <= t[1] && t[1] <= t[2]);
60 }
61
62 Status isDescending(Triplet t){
63 if (t == NULL)
64 return ERROR;
65 return(t[0] >= t[1] && t[1] >= t[2]);
66 }
67
68 Status Max(Triplet t, Elemtype *e){
69 if (t == NULL)
70 return ERROR;
71 *e = ((t[0] > t[1] ? t[0] : t[1])>t[2]) ? (t[0] > t[1] ? t[0] : t[1]) : t[2];
72 return OK;
73 }
74
75 Status Min(Triplet t, Elemtype *e){
76 if (t == NULL)
77 {
78 printf("t为空\n");
79 return ERROR;
80 }
81 *e = ((t[0] < t[1] ? t[0] : t[1])<t[2]) ? (t[0] < t[1] ? t[0] : t[1]) : t[2];
82 return OK;
83 }
84
85 void main(){
86 Status i;//程序状态
87 Elemtype p;//用于主函数和子函数的内存共享
88 Elemtype max;
89 Elemtype min;
90 Triplet t;
91 int di = 1;
92 i = InitTriplet(&t, 0, 1, 2);
93 if (i){
94 i = Get(t, di, &p);
95 }
96 printf("三元组中第%d个元素为%d\n", di, p);
97 if (i){
98 i = Put(t, di, 5);
99 }
100 if (i){
101 i = Show(t);
102 }
103
104 if (isAscending(t))
105 printf("三元组中的元素是按升序排列\n");
106 else
107 printf("三元组中的元素不是按升序排列\n");
108
109 if (isDescending(t))
110 printf("三元组中的元素是按降序排列\n");
111 else
112 printf("三元组中的元素不是按降序排列\n");
113
114 if (i){
115 i = Max(t, &max);
116 }
117 printf("三元组中元素最大的元素为%d\n", max);
118
119 if (i){
120 DestroyTriplet(&t);
121 }
122
123
124 if (i){
125 i = Min(t, &min);
126 }
127
128 printf("三元组中元素最小的元素为%d\n", min);//t所指向的内存空间已被释放,min中存放着未初始化的垃圾数字
129 }