很久没用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\n", state);
64
65 ElemType e;
66 Get(T, 3, e);
67 printf("T[i]=%d\n", e);
68
69 ElemType t1, t2, t3;
70 printf("sizeof T:%d\n", 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\n", t1, t2, t3);
75
76 Put(T, 1, 10);
77 printf("T[1]=%d\n", T[0]);
78 ElemType max, min;
79 Max(T, max);
80 Min(T, min);
81 printf("max=%d\n", max);
82 printf("min=%d\n", min);
83
84 Status s1 = DestroyTriplet(T);
85 printf("destroy state: %d\n", s1);
86
87 getchar();
88 return 0;
89 }
原文链接: https://www.cnblogs.com/eleven24/p/5553097.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/234429
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!