01-抽象数据类型

一.作业题目

实验题目

试仿照三元组或复数的抽象数据类型写出有理数抽象数据类型的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。

有理数基本运算如下所示:

  • 1.构造有理数T,元素e1,e2分别被赋以分子、分母值
  • 2.销毁有理数T
  • 3.用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母。
  • 4.将有理数T的分子或分母更改为e,入参i为1时改变分子, i为2是改变分母
  • 5.有理数T1,T2相加
  • 6.有理数T1,T2相减
  • 7.有理数T1,T2相乘
  • 8.有理数T1,T2相除

    补充:加减乘除运算结果我存入的是有理数T1

实验要求:

  • 抽象数据类型名为Rational。
  • 有理数分母不能为负数或者0,类似输入请提示重输入。
  • 数据对象和数据运算的表示与数据操作的实现分离。表示用头文件完成,实现用CPP文件完成。Main.cpp文件实现数据输入输出。
  • 数据输入输出格式参考如下:

    输入:

    1 3 //T1的分子、分母

    1 2 //T2的分子、分母

    ** 输出:**

    5 6 //两个有理数相加

    -1 6 //两个有理数相减

    1 6 //两个有理数相乘

    2 3 //两个有理数相除

  • 程序应对异常输入或者出错必要处理和提示,分子分母要约分。

二、博客作业要求:

1.作业内容

用ADT的抽象数据模型描述你的有理数数据类型。

ADT  Rational
{    数据对象:
          D={e1,e2|e1,e2均为实数}
     数据关系:
          R={<e1,e2>|e1是有理数的分子部分,e2是有理数的分母部分}
     基本运算:
          InitRational(rational,e1,e2):构造有理数T,其分子和分母分别赋以参数v1,v2的值
          DestroyRational(rational):销毁有理数T
          Get(rational,choice):提取分子或分母
          Yuefen(rational):对分子分母进行约分
          Put(rational, choice):修改分子或分母
          Add(rational,rationalnew):俩个有理数相加
          Minus(rational,rationalnew):俩个有理数相减
          Multiply(rational,rationalnew):俩个有理数相乘
          Divided(rational,rationalnew):俩个有理数相除
}ADT Rational

2.数据结构、函数说明

截图展示你的头文件。头文件代码务必加入注释。

3.代码实现说明

截图展示每个函数代码。简要说明做法。

  • 构造有理数:正确输入e1,e2,给T申请空间,将e1,e2的值存在T数组中,T[0]表示分子,T[1]表示分母
  • 销毁有理数:释放T的空间
  • 查询分子或分母的值:通过i的输入,输出对应数组的值,即输出分子分母的值
  • 修改分子或分母的值:通过i的输入,修改对应数组的值,即修改分子分母的值
  • 有理数的加法运算:再构造一个新的有理数,对俩个有理数进行通分相加并约分化简
  • 有理数的减法运算:再构造一个新的有理数,对俩个有理数进行通分相减并约分化简
  • 有理数的乘法运算:再构造一个新的有理数,对俩个有理数进行相乘并约分化简
  • 有理数的除法运算:再构造一个新的有理数,对俩个有理数进行相除并约分化简
  • 约分:利用辗转相除法找到最小公倍数,分子分母同除最小公倍数,注意分子小于等于0的情况

5.结果展示

每种测试数据一个截图结果。测试数据越多,此项得分越高。务必考虑临界数据,如分母为负数或0情况等等。

构造有理数

销毁有理数

正确查询输出查询结果,错误查询无结果

修改分子或分母

运算操作有理数分子均大于0

有理数加减

有理数乘除

运算操作有理数分子小于0

补充:运行过程中发现一些没有处理好的,后面代码还可以有小改动,像结束操作时销毁俩个有理数,还有判断分母输入是否正确时,代码展示部分只能判断一次,再输入时分母即使是0或者负数依然顺利输入不能提示错误,可以改成while循环,还有输入时一些提示语句可以再完善一点

退出操作

6.总结

谈谈你对数据结构及抽象数据类型的理解。

(1)数据结构包括俩个部分,一是数据,二是数据间的关系。数据结构包括数据元素间的逻辑关系,数据元素和关系在计算机中的储存方式,还有就是数据运算这几个方面。
(2)逻辑结构包括集合,线性,树,图;存储结构主要有顺序的和链式的;数据运算最常用的有检索,插入,删除,排序等
(3)抽象数据类型适合不大容易表示出来的数据,比如像这次的有理数分子分母,还有课本上的复数。可以通过数组或者结构体数组来将组成数据的部分分装储存并进行操作

原文地址:https://www.cnblogs.com/tajiyu/p/8503831.html

时间: 2024-10-17 02:40:13

01-抽象数据类型的相关文章

01——日期抽象数据类型设计与实现

01--日期抽象数据类型设计与实现 1.思维导图及学习体会 1.1第一章绪论知识点思维导图 思维导图如下: 1.2 学习体会 寒假玩疯了,没有看视频,很少打代码,以至于刚开学的时候没跟上,看书看的吃力,听课也很懵逼,还好现在调整过来了. 上学期学的C语言是数据结构的基础,数据结构就像是把C语言的语法连起来使用.比起上学期按题目要求打代码,我们现在更要考虑代码的时间复杂度和空间复杂度,要思考如何让代码达到最优,这个比单纯解决题目要求更难,这个也是我们这个学期学习的重点,也是我们应该投入精力的部分.

【Python&amp;数据结构】 抽象数据类型 Python类机制和异常

这篇是<数据结构与算法Python语言描述>的笔记,但是大头在Python类机制和面向对象编程的说明上面.我也不知道该放什么分类了..总之之前也没怎么认真接触过基于类而不是独立函数的Python编程,借着本次机会仔细学习一下. 抽象数据类型 最开始的计算机语言,关注的都是如何更加有效率地计算,可以说其目的是计算层面的抽象.然而随着这个行业的不断发展,计算机不仅仅用于计算,开发也不仅只关注计算过程了,数据层面的抽象也变得同样重要.虽然计算机语言一开始就有对数据的抽象,但是那些都只是对一些最基本的

数据类型和抽象数据类型

<(^-^)> 我们知道在各种编程语言中都会有数据类型. 一.数据类型 先看看为什么会有不同的数据类型呢?很简单,很多东西不能一概而论,而是需要更精确的划分.计算机计算1+1并不需要多么大的空间,但是计算10000000000+1000000000就得需要有个比较大的空间来放.还有有时候会计算小数,小数的位数不一样,需要的空间也就不一样.数字1和字母a也需要区分啊,于是开发者就想出了“数据类型”这一招,用来描述不同的数据的集合. 我记得最早接触的数据类型就是int了.当初一个int a;就把我

计算机软考笔记之《抽象数据类型(ADT)》

1.引言 1抽象数据类型和数据结构的关系 抽象数据类型(ADT)是一种比数据结构处于更高抽象层的数据类型,ADT使用数据结构来实现. 2数据类型的定义和应用于数据的操作定义是ADT背后的一部分概念,隐藏数据上的操作是如何进行的. 3分类:简单抽象数据类型和复杂抽象数据类型 简单ADT:整数.实数.字符.指针: 复杂ADT:需要建立.不需要详细说明实现过程的泛化操作成为抽象. 抽象概念意味着: ①知道一个数据类型能做什么: ②如何去做是隐藏的. 4定义 抽象数据类型就是与对数据类型有意义的操作封装

抽象数据类型(ADT)入门(一)

抽象数据类型(ADT)入门(一) 1.抽象数据类型(Abstract Data Types,ADT)和ADT的实现 抽象数据类型:一个数据元素集合以及在这些数据上的操作. ADT的一个实现包括存储数据元素的存储结构以及实现基本操作的算法. 在这个数据抽象的思想中,数据类型的定义和它的实现是分开的,这在软件设计中是一个重要的概念.这使得只研究和使用它的结构而不用考虑它的实现细节成为可能.实际上,这通常使用在int.double.char和bool等预定义数据类型上的方法,使用这些数据类型的程序员在

ELF格式解析库之抽象数据类型

抽象?抽谁的象? ELF是一种链接执行格式,它规定了对于一个ELF文件的基本数据类型是什么样的.可是,要解析一个ELF文件,而这个ELF文件或者是32Bits 或者是 64Bits,反正字长是未定的,怎么办?难道我们要定义两套解析的接口,以对应不同的字长的ELF文件吗?如果要这样做,不是不可以,只是那样做为接口的设计增加了太大的负担.这里我们采用"抽象"的方式,将已有的两套基础数据结构封装成一个兼容的数据结构.这样,我们设计解析接口时,可以做到尽量的简化,大大的减轻了工作量. 因此,这

算法(第4版)-1.2.1 使用抽象数据类型

总结:本小节是关于抽象数据类型的综述,包括是什么.为什么.怎么办. 重点: 1. 研究同一个问题的不同算法的主要原因:它们的性能特点不同. 2. API:通过列出所有构造函数和实例方法(及操作)并简要描述它们的功用,说明抽象数据类型的行为. 3. Java中的所有数据类型都会继承toString()方法来返回用String表示的该类型的值.Java会在用+运算符将任意数据类型的值和String值连接时调用该方法. 可以重写toString()方法.必须声明为public String toStr

线性表的抽象数据类型描述

代码如下 1 //抽象数据类型线性表的定义 2 #include <studio.h> 3 /*-------------------初始化线性表-----------------------*/ 4 void InitList(SqList *&L) 5 { 6 L=(SqList*)malloc(sizeof(SqList)); 7 L->length=0; 8 } 9 /*--------------------销毁线性表,释放内存空间-------------------

C++抽象数据类型,如何抽象

C++是个多范式的语言,所以C++难学,所以C++强大,可比起java,C#,用C++来做软件开发,开发周期要长很多. 为什么呢?这是因为C++的自由度高,换句话说自由度越高地语言,开发软件的周期越长,这是有一定道理的 自由度过高就不容易掌控,java和C#它们的库很强大,这在一定程度上就限制了自由度,相当于提供了一套模式,方法,开发人员不需要去为实现这些东西而操心 然而C++程序员却需要为这些费劲心力,这体现在实现细节上. 本文要说的是抽象数据类型,抽象数据类型 ADT 一种重要的数据类型.它

ADT(Abstract Data Type)抽象数据类型

ADT(Abstract Data Type)抽象数据类型 为了便于理解,以复数为例: (1)定义: ADT Complex{ 数据对象:D={e1,e2|e1,e2为实数} 数据关系:S={<e1,e2>|e1是实部,e2是虚部} 基本操作: Creat(&C , x, y) GetReal(C) GetImage(C) Add(c1,c2) Sub(C1,C2) } ADT Complex; (2)表示: typedef struct{ float Realpart; float