三元组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

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/234429

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午4:15
下一篇 2023年2月13日 下午4:15

相关推荐