很久没用C语言,都忘了C语言中没有引用参数,下面的代码中用到了C语言没有的引用参数。
首先是一些表示状态的全局变量
common.h
1 #define TRUE 1 2 #define FALSE 0 3 #define OK 1 4 #define ERROR 0 5 #define INFEASIBLE -1 6 #define OVERLOW -2 7 typedef int Status;
然后是三元组ADT的头文件,包含了三元组的函数声明
triplet.h
1 #include "common.h" 2 3 //--------采用动态分配的顺序存储结构----- 4 typedef int ElemType; 5 typedef ElemType* Triplet; //由InitTriplet分配3个元素的存储空间 6 7 //--------基本操作的函数原型说明------ 8 Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3); 9 //操作结果:构造三元组T,元素e1,e2,e3分别被赋以参数v1,v2,v3的值 10 11 Status DestroyTriplet(Triplet &T); 12 //操作结果:三元组T被销毁 13 14 ElemType Get(Triplet T, int i, ElemType &e); 15 //初始条件:三元组T已存在,1<=i<=3 16 //操作结果:用e返回T的第i元的值 17 18 Status Put(Triplet &T, int i, ElemType e); 19 //初始条件:三元组T已存在,1<=i<=3 20 //操作结果:改变T的第i元的值为e 21 22 Status IsAscending(Triplet T); 23 //初始条件:三元组已存在 24 //操作结果:如果T的三个元素按升序排列,则返回1,否则返回0 25 26 Status IsDescending(Triplet T); 27 //初始条件:三元组T已存在 28 //操作结果:如果T的三个元素按降序排列,则返回1,否则返回0 29 30 Status Max(Triplet T, ElemType &e); 31 //初始条件:三元组T已存在 32 //操作结果:用e返回T的三个元素中的最大值 33 34 Status Min(Triplet T, ElemType &e); 35 //初始条件:三元组T已存在 36 //操作结果:用e返回T的三个元素中的最小值
最后是triplet函数的定义以及main函数
source.cpp
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include "triplet.h" 4 5 //------------基本操作的实现------------ 6 Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){ 7 //构造三元组T,依次置T的3个元素的初始值为v1,v2,v3 8 T = (ElemType *)malloc(3 * sizeof(ElemType)); //分配3个元素的存储空间 9 if (!T){ 10 exit(OVERLOW); //分配存储空间失败 11 } 12 T[0] = v1; T[1] = v2; T[2] = v3; 13 return OK; 14 } //InitTriplet 15 16 Status DestroyTriplet(Triplet &T){ 17 //销毁三元组T 18 free(T); T = NULL; 19 return OK; 20 }//DestroyTriplet 21 22 ElemType Get(Triplet T, int i, ElemType &e){ 23 //1<=i<=3, 用e返回T的第i元的值 24 if (i<1 || i>3) return ERROR; 25 e = T[i - 1]; 26 return OK; 27 }//Get 28 29 Status Put(Triplet &T, int i, ElemType e){ 30 //1<=i<=3, 用e赋值给T[i] 31 if (i<1 || i>3) return ERROR; 32 T[i - 1] = e; 33 return OK; 34 }//Put 35 36 Status IsAscending(Triplet T){ 37 //如果T的三个元素按照升序排列,则返回1,否则返回0 38 return (T[0] <= T[1]) && (T[1] <= T[2]); 39 }//IsAscending 40 41 Status IsDecending(Triplet T){ 42 //如果T的三个元素按照降序排列,则返回1,否则返回0 43 return (T[0] >= T[1]) && (T[1] >= T[2]); 44 }//IsDescending 45 46 Status Max(Triplet T, ElemType &e){ 47 //用e返回T的三个元素中的最大值 48 e = (T[0] >= T[1]) ? ((T[0] >= T[2]) ? T[0] : T[2]) : 49 ((T[1] >= T[2]) ? T[1] : T[2]); 50 return OK; 51 } 52 53 Status Min(Triplet T, ElemType &e){ 54 //用e返回T的三个元素中的最小值 55 e = (T[0] <= T[1]) ? ((T[0] <= T[2]) ? T[0] : T[2]) : 56 ((T[1] <= T[2]) ? T[1] : T[2]); 57 return OK; 58 } 59 60 int main(){ 61 Triplet T; 62 Status state = InitTriplet(T, 1, 2, 3); 63 printf("state: %d ", state); 64 65 ElemType e; 66 Get(T, 3, e); 67 printf("T[i]=%d ", e); 68 69 ElemType t1, t2, t3; 70 printf("sizeof T:%d ", sizeof(T)); 71 Get(T, 1, t1); 72 Get(T, 2, t2); 73 Get(T, 3, t3); 74 printf("t1=%d;t2=%d;t3=%d ", t1, t2, t3); 75 76 Put(T, 1, 10); 77 printf("T[1]=%d ", T[0]); 78 ElemType max, min; 79 Max(T, max); 80 Min(T, min); 81 printf("max=%d ", max); 82 printf("min=%d ", min); 83 84 Status s1 = DestroyTriplet(T); 85 printf("destroy state: %d ", s1); 86 87 getchar(); 88 return 0; 89 }