抽象数据类型三元组表示与实现
1,抽象数据类型概念:
(1)由用户定义,用以表示应用问题的数据模型;(2)由基本的数据类型组成, 并包括一组相关的操作;
2,抽象数据类型用三元组表示:ADT = (D,S,P)
D: 数据对象 S:D上的关系集 P:D上的操作集
3,ADT常用定义格式:
ADT抽象数据类型名 {
数据对象:<数据对象的定义>
数据关系:<数据关系的定义>
基本操作 :<基本操作的定义>
} ADT抽象数据类型名
语言描述功能
(1) 预定义常量及类型
//函数结果状态代码 #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OVERFLOW -2
// Status是函数返回值类型,其值是函数结果状态代码 eg:typedef int Status;
(2)数据元素被约定为ElemType 类型,用户需要根据具体情况,自行定义该数据类型。
三元组Triplet的定义:
ADT Triplet
{ 数据对象:D = {e1,e2,e3 | e1,e2,e3属于ElemType //ElemType表示数据类型·
数据关系:R = {<e1,e2> | <e2,e3>} //< >表示有序,从左至右。
基本操作:。。。。}ADT Triplet
基本操作 | 初始条件 | 操作结果 |
initTriplet(&T,v1,v2,v3) |
构造三元组T,元素e1,e2和e3分别被赋予参数v1,v2,v3的值。 |
|
DestroyTriplet (&T) |
三元组T已经存在。 |
销毁三元组T。 |
getElem (T,i,&e) |
三元组T已经存在,1<=i<=3. |
用e返回三元组T的第i个元素。 |
putElem (&T,i,e) |
三元组T已经存在, 1<=i<=3 |
用e值取代三元组T的第i个元素。 |
IsAscending (T) |
三元组T已经存在。 |
如果三元组T的三个元素按升序排列,则返回TRUE;否则返回FALSE。 |
IsDescending (T) | 三元组T已经存在 | 如果三元组T的三个元素按降序排列,则返回TRUE,否则返回FALSE。 |
getMax (T,&e) |
三元组T已经存在。 |
用e返回T的3个元素中的最大值。 |
getMin (T,&e) |
三元组T已经存在 |
用e返回T的3个元素中的最小值。 |
抽象数据类型示例:
设计实现抽象数据类型“三元组 (Triplet)” 。每个三元组由任意三个实数的序列构成,基本操作包括:1创建一个三元组,2取三元组的任意一个分量,3置三元组的任意一个分量,4求三元组的最大分量,5求三元组的最小分量,6显示三元组,7销毁三元组等。
要求:(1)写出抽象数据类型的定义,即数据对象、数据关系、基本操作;(2)用结构体封装需要定义的数据类型,如定义三元组ADT时,首先用结构体封装“三元组”的三个分量。并利用typedef对结构体重新命名;(3)完成基本操作的C语言实现与调用。
每构造一个函数和对应主函数后,都要编译运行一次,以防最后检查困难
解:
#include<stdio.h>
#define OK 1
#define ERROR 0
typedef int Status; //三元组的类型先定义为float/int,可以随时变换成别的类型
typedef float ElemType; //若要更改数据类型,直接改,不必要全篇去找出修改
typedef struct{ //结构体,数组的使用, ElemType e[3];
}Triplet;
Status initTriplet(Triplet &T,ElemType v0,ElemType v1,ElemType v2) //构造三元组(初始化)
{T.e[0]=v0; T.e[1]=v1;T.e[2]=v2; //v0,v1,v2为形参 return OK;
}
Status getElem(Triplet T,int i,ElemType &e) //用e返回三元组T的第i个元素
{e=T.e[i-1]; //数组第一个是从[0]开始的 return OK;
}
Status getMax(Triplet T,ElemType &max) //用e返回T的3个元素中的最大值。
{if(T.e[0]>T.e[1])max=T.e[0];elsemax=T.e[1];if(T.e[2]>max)max=T.e[2];return OK;
}
Status putElem(Triplet &T,int i,ElemType z) //用e值取代三元组T的第i个元素。
{T.e[i-1]=z;return OK;
}
Status isAscending(Triplet T) //如果三元组T的三个元素按升序排列,则返回OK;否则返回ERROR
{return (T.e[0]<=T.e[1])&&(T.e[1]<=T.e[2]);return OK;
}
int main()
{Triplet T; //定义一个变量 T为实参 ElemType a,b,c; //要定义a,b,c三个实参和形参v0,v1,v2对应ElemType x,y; //定义x,y两个实参和形参e,max对应int flag; //用于判断if语句 scanf("%f%f%f",&a,&b,&c);initTriplet(T,a,b,c);printf("三元组是:%f,%f,%f\n",T.e[0],T.e[1],T.e[2]);getElem(T,2,x); //用e返回三元组T的第2个元素printf("三元组中第二个数是:%f\n",x);getMax(T,y); //用e返回T的3个元素中的最大值。printf("三元组中最大值是:%f\n",y);flag=isAscending(T); //flag=isAscending(T)的返回值 if(flag==1) printf("升序\n");else printf("非升序\n");putElem (T,1,99); //用e值取代三元组T的第i个元素printf("三元组是:%f,%f,%f\n",T.e[0],T.e[1],T.e[2]); //取代后的三元组 return 0;
}
抽象数据类型三元组表示与实现相关推荐
- 数据结构--抽象数据类型三元组Triplet的表示和实现
抽象数据类型三元组Triplet的表示和实现. 数据类型是一个值的集合和定义在这个值集上的一组操作的总称.按"值"的不同特性,高级程序语言中的数据类型可分为两类:一类是非结构的原子 ...
- 抽象数据类型三元组Triplet基本操作与实现 严蔚敏版
这个博客基本操作大部分来自教材<数据结构C语言版>严蔚敏版,实现了书中的大部分功能,并且用了三个文件. 一个是主函数,一个是功能模块,一个是头文件定义,用VC6.0++完成 //头文件声明 ...
- 设计实现抽象数据类型“三元组”,要求动态分配内存
基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组. #include <stdio.h> #in ...
- 三元组的抽象数据类型
三元组的抽象数据类型 1.基本要求 2.基本要求 3.带菜单版本 1.c++实现 2.C语言实现 1.基本要求 (1)写出抽象数据类型的定义,即数据对象.数据关系.基本操作 (2)用结构体封装需要定义 ...
- 实验报告:抽象数据类型的表现和实现
实验报告:抽象数据类型的表现和实现 实验内容 基本要求: 设计实现抽象数据类型"三元组",要求动态分配内存.每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元 ...
- 抽象数据类型与计算机内部表示和实现无关,实验02 抽象数据类型的表示与实现.doc...
文档介绍: EvaluationWarning:ThedocumentwascreatedwithSpire..蕊歼植罩胖什塌浦有夏禽院灼屉重陕馆谗肘钡枪帽潭裙富队捌狞栅试颅蛆占芝虞却轮侠靛崎刑漆联斤 ...
- 抽象数据类型的三元组C语言,试仿照三元组的抽象数据类型分别写出数据类型复数和有理数的定义?...
满意答案 hweiwei420 2015.10.10 采纳率:50% 等级:13 已帮助:14203人 a. 抽象数据类型复数complex: ADT complex{ 数据对象:D={e1,e ...
- 数据结构简介以及抽象数据类型的实现
数据结构简介 数据结构(英语:data structure)是计算机中存储.组织数据的方式. 数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问 ...
- 数据结构的基本概念和抽象数据类型
1.基本概念和术语 数据:是对客观事物的符号表示. 数据元素:数据的基本单位,一个数据元素可由若干个数据项组成,数据项是数据的不可分割的最小单位 数据对象:性质相同的数据元素的集合是数据的一个子集 数 ...
最新文章
- Android开发之可以在任意页面开启主线程和使用线程池开启子线程的工具类
- Android与Libgdx环境配置
- Java常用类集接口以及实现方式总结
- mysql大小写敏感_MySQL数据库大小写敏感的问题
- Spark源码系列(二)RDD详解
- Climbing Stairs @python
- IE8自动提交form的问题
- ssa/ass字幕格式全解析
- 换个角度看发国难财的行为
- 促使网站快速收录的一些方法,超详细
- 六、肿瘤RNA突变的全组学研究-肿瘤基因调控(Genomic basis for RNA alterations in cancer)
- python实现雪花飘落的效果_简单说 JavaScript实现雪花飘落效果
- 如何解决merge conflict的方法
- js Array 标准方法
- 给女朋友的微信专属推送
- XX健康:移动端开发-体检预约设计和实现微信公众号注册阿里短信服务
- “网上购车平台”又出低首付上私户新模式
- 全国省份和大学json
- H5视频之RTMP、RTSP、HTTP协议流直播流测试地址
- 辩驳一个默认的说法:IE6不支持!important
热门文章
- 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起
- jupyter 快捷键
- 企业在申请专利时如何明确要申请专利的技术点
- 梦想Android版CAD控件2022.06.22更新,APP查看CAD图纸
- axure 8 表格合并_Python办公自动化(六)|自动更新表格,告别繁琐
- java pdf stamper_java 通过pdf模板,生成PDF,并下载到本地-Go语言中文社区
- 【汇智学堂】2进制与10进制之间相互转化
- java bat运行jar文件_windows下bat批量运行jar包
- 《阿里巴巴Android开发手册》正式发布,安卓开发者的福音
- c语言的实验报告 实验4,C语言实验四实验报告