三元组ADT (数据结构C语言版) C++实现
很久没用C语言,都忘了C语言中没有引用参数,下面的代码中用到了C语言没有的引用参数。
首先是一些表示状态的全局变量
common.h
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERLOW -2
typedef int Status;
然后是三元组ADT的头文件,包含了三元组的函数声明
triplet.h
#include "common.h" //--------采用动态分配的顺序存储结构-----
typedef int ElemType;
typedef ElemType* Triplet; //由InitTriplet分配3个元素的存储空间 //--------基本操作的函数原型说明------
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3);
//操作结果:构造三元组T,元素e1,e2,e3分别被赋以参数v1,v2,v3的值 Status DestroyTriplet(Triplet &T);
//操作结果:三元组T被销毁 ElemType Get(Triplet T, int i, ElemType &e);
//初始条件:三元组T已存在,1<=i<=3
//操作结果:用e返回T的第i元的值 Status Put(Triplet &T, int i, ElemType e);
//初始条件:三元组T已存在,1<=i<=3
//操作结果:改变T的第i元的值为e Status IsAscending(Triplet T);
//初始条件:三元组已存在
//操作结果:如果T的三个元素按升序排列,则返回1,否则返回0 Status IsDescending(Triplet T);
//初始条件:三元组T已存在
//操作结果:如果T的三个元素按降序排列,则返回1,否则返回0 Status Max(Triplet T, ElemType &e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最大值 Status Min(Triplet T, ElemType &e);
//初始条件:三元组T已存在
//操作结果:用e返回T的三个元素中的最小值
最后是triplet函数的定义以及main函数
source.cpp
#include<stdio.h>
#include<stdlib.h>
#include "triplet.h" //------------基本操作的实现------------
Status InitTriplet(Triplet &T, ElemType v1, ElemType v2, ElemType v3){
//构造三元组T,依次置T的3个元素的初始值为v1,v2,v3
T = (ElemType *)malloc( * sizeof(ElemType)); //分配3个元素的存储空间
if (!T){
exit(OVERLOW); //分配存储空间失败
}
T[] = v1; T[] = v2; T[] = v3;
return OK;
} //InitTriplet Status DestroyTriplet(Triplet &T){
//销毁三元组T
free(T); T = NULL;
return OK;
}//DestroyTriplet ElemType Get(Triplet T, int i, ElemType &e){
//1<=i<=3, 用e返回T的第i元的值
if (i< || i>) return ERROR;
e = T[i - ];
return OK;
}//Get Status Put(Triplet &T, int i, ElemType e){
//1<=i<=3, 用e赋值给T[i]
if (i< || i>) return ERROR;
T[i - ] = e;
return OK;
}//Put Status IsAscending(Triplet T){
//如果T的三个元素按照升序排列,则返回1,否则返回0
return (T[] <= T[]) && (T[] <= T[]);
}//IsAscending Status IsDecending(Triplet T){
//如果T的三个元素按照降序排列,则返回1,否则返回0
return (T[] >= T[]) && (T[] >= T[]);
}//IsDescending Status Max(Triplet T, ElemType &e){
//用e返回T的三个元素中的最大值
e = (T[] >= T[]) ? ((T[] >= T[]) ? T[] : T[]) :
((T[] >= T[]) ? T[] : T[]);
return OK;
} Status Min(Triplet T, ElemType &e){
//用e返回T的三个元素中的最小值
e = (T[] <= T[]) ? ((T[] <= T[]) ? T[] : T[]) :
((T[] <= T[]) ? T[] : T[]);
return OK;
} int main(){
Triplet T;
Status state = InitTriplet(T, , , );
printf("state: %d\n", state); ElemType e;
Get(T, , e);
printf("T[i]=%d\n", e); ElemType t1, t2, t3;
printf("sizeof T:%d\n", sizeof(T));
Get(T, , t1);
Get(T, , t2);
Get(T, , t3);
printf("t1=%d;t2=%d;t3=%d\n", t1, t2, t3); Put(T, , );
printf("T[1]=%d\n", T[]);
ElemType max, min;
Max(T, max);
Min(T, min);
printf("max=%d\n", max);
printf("min=%d\n", min); Status s1 = DestroyTriplet(T);
printf("destroy state: %d\n", s1); getchar();
return ;
}
三元组ADT (数据结构C语言版) C++实现的更多相关文章
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- 【数据结构(C语言版)系列二】 栈
栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...
- 深入浅出数据结构C语言版(5)——链表的操作
上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
- 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器
在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...
- 数据结构(c语言版)文摘
第一章 绪论 数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科. 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理 ...
随机推荐
- javascript 强制转换规则 boolean 布尔值类型
摘自 <你不知道的Javascript(中卷)> p55 一句话简述, 假值表以外的值均可以认为是真值,部分浏览器可能自定义了假值表以外的假值,并不符合W3C规范,需要特殊对待. 首先也是 ...
- phpcms v9如何给父级单页栏目添加内容
对于phpcms单页的调用相信大家都应该没问题,那么如果我们在后台添加的单页有二层甚至更多的时候,这样在管理内容上是没有给父级栏目添加内容这一功能的!那么我们该怎么实现这个功能并调用呢? 首先我们要修 ...
- Centos7部署Kubernetes集群(单工作节点)+配置dashboard可视化UI
目标:docker+kubernetes+cadvosor+dashboard 一:物理硬件 两台虚拟机(centos7):一台做为主节点(master),一台做为工作节点(node) [root@M ...
- Python基础知识-06-集合内存布尔False
python其他知识目录 1.判断一个字符串中是否有敏感字符? #str: m_str="我叫魔降风云变" if "魔" in m_str: #判断指定字符是否 ...
- 团队Alpha冲刺(三)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最 ...
- lintocde-247-线段树的查询 II
247-线段树的查询 II 对于一个数组,我们可以对其建立一棵 线段树, 每个结点存储一个额外的值 count 来代表这个结点所指代的数组区间内的元素个数. (数组中并不一定每个位置上都有元素) 实现 ...
- Windows Forms编程实战学习:第三章 菜单
第三章 菜单 1,控件和容器 所有的Windows Forms控件都是从System.Windows.Forms.Control类继承的,相关类的层次结构如下图所示: MarshalByRefObje ...
- Linux的压缩/解压缩文件处理 zip & unzip
Linux的压缩/解压缩命令详解及实例 压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服 ...
- Vue2.0 render:h => h(App)
new Vue({ router, store, //components: { App } vue1.0的写法 render: h => h(App) vue2.0的写法 }).$mount( ...
- 第131天:移动web页面的排版与布局
一.总之一句话, 尽量用mm 毫米作为标准单位. 采用新的相对单位 rem 首先设置html的 font-size 为根大小. html{ font-size:1mm; } .titleheight{ ...