三元组ADT (数据结构C语言版) C++实现

很久没用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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值