三元组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语言版)文摘
第一章 绪论 数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科. 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理 ...
随机推荐
- mysql 5.5 zip配置安装
1.解压2.创建option文件 --defaults-file=../my.ini [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mys ...
- Thymeleaf教程【转】
作者:不做浮躁的人 转自:http://www.blogjava.net/bjwulin/archive/2013/02/07/395234.html PS:其他推荐教程地址 http://blog. ...
- 线段树---no end
额,还有 :区间操作,交,并,补等 区间合并 扫描线 这些问题有空再研究吧.... 先看j2ee了..... 传送门 版权声明:本文为博主原创文章,未经博主允许不得转载.
- css3 关于文字,字体属性(转载)
1.text-overflow属性(实现省略号效果) text-overflow用来设置是否使用一个省略标记(…)标示对象内文本的溢出. [语法] ❤text-overflow只是用来说明文字溢出时用 ...
- C#控件之Repeater控件使用
歡迎大家來討論,修改,一定虛心接受. 1.為什麼使用Repeater控件? 關於把從數據庫讀取的數據綁定到前台頁面,我們可以使用DataGrid.DataGridView以及Repeater來佈局,三 ...
- 2nd 词频统计更新
词频统计更新 实现功能:从控制台输入文件路径,并统计单词总数及不重复的单词数,并输出所有单词词频,同时排序. 头文件 #include <stdio.h> #include <std ...
- HDU 2154 跳舞毯
http://acm.hdu.edu.cn/showproblem.php?pid=2154 Problem Description 由于长期缺乏运动,小黑发现自己的身材臃肿了许多,于是他想健身,更准 ...
- 关于初装kali linux 2.0时DEB文件安装失败的问题
kali linux 是一个基于debian 的linux发行版本,支持deb文件格式的图形化安装. 刚装上kali linux时安装程序总是失败,提示处理时错误. 经过一番爬贴,是软件源的原因,解决 ...
- Android中res/layout文件夹里新建布局文件,R中不生成ID的奇葩错误
新浪微博:http://weibo.com/u/1928100503 网上看了下,发现大都是xml文件名大写而导致的id不能生成的问题,但在下的问题却不是大小写的问题,在下发现,当你的layout目录 ...
- MVC SignalR Hub初学
具体有关SignalR的说明查网上,我这里简单列举一个例子 1.新建MVC,添加SignalR引用(NuGet安装). 2.添加OWIN START类 public class Startup { p ...