三元组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语言版)文摘
第一章 绪论 数据结构:是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科. 数据:是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理 ...
随机推荐
- 设计模式C++实现(1)——策略(Strategy)模式
目录 策略模式 应用案例 实现的关键 Talk is cheap,let's See The Code 设计思想 参考 策略模式 策略模式定义了一系列算法和行为(也就是策略),他们可以在运行时相互替换 ...
- 基础的Servlet
1.认识Servlet 今天接触了Servlet,我就写了这篇Servlet的文章.首先,我们了解一下Servlet是什么: 这是百度百科的解释,我个人理解是可以用来前后端交互的一个东西,例如可以实现 ...
- Tensorflow框架之AlexNet
from datetime import datetime import math import time import tensorflow as tf batch_size=32 num_batc ...
- python sys.argv是什么?
1.sys.argv 是获取运行python文件的时候命令行参数,且以list形式存储参数 2.sys.argv[0] 代表当前module的名字 下面的代码文件是a.py,当我不用IDE工具,只用命 ...
- C++数字三角形问题与dp算法
题目:数字三角形 题目介绍:如图所示的数字三角形,要求从最上方顶点开始一步一步下到最底层,每一步必须下一层,求出所经过的数字的最大和. 输入:第一行值n,代表n行数值:后面的n行数据代表每一行的数字. ...
- 简单主机批量管理工具(这里实现了paramiko 用su切换到root用户)
项目名:简单主机批量管理工具 一.需求 1.主机分组 2.可批量执行命令.发送文件,结果实时返回,执行格式如下 batch_run -h h1,h2,h3 -g web_clusters,db_ ...
- We are writing to let you know we have removed your selling privileges
Hello, We are writing to let you know we have removed your selling privileges, canceled your listin ...
- C++ STL栈和队列
在C++标准库(STL)中,实现了栈和队列,方便使用,在这里我整理了一下笔记,作简要介绍. 1,栈(stack): 头文件 : #include<stack> 定义栈 :stack< ...
- DCOM初步窥探二
1.COM进程透明性表现在“组件对象和客户程序可以拥有各自的空间,也可以共享同一个进程空间”. COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性. 组件对象和客户代码不必考虑调用传递的 ...
- 第一次c++作业(感觉不是很好系列)
日常先贴github的地址 https://github.com/egoistor/Elevator-scheduling 然后我觉得学习了半天,构造函数似懂非懂(用的是class自动生成的构造函数, ...