1、描述以下抽象数据类型(ADT)的载体集和一些操作:a) 实数;b) 有理数;c) 复数;d) 整数的有序对;e) 字符集;f) 成绩(字母 A、B、C、D 和 F)
a) 实数 :载体集是全体实数。操作有加、减、乘、除、开方、取绝对值等。
b) 有理数 :载体集是所有可以表示为两个整数之比(分母不为零)的数。操作有加、减、乘、除、约分等。
c) 复数 :载体集是形如 a + bi ( a 、 b 为实数, i 为虚数单位)的数。操作有加、减、乘、除、共轭等。
d) 整数的有序对 :载体集是由两个整数组成的有序对 (m, n) , m 、 n 为整数。操作有加法(对应元素相加)、减法(对应元素相减)等。
e) 字符集 :载体集是由字符组成的集合。操作有添加字符、删除字符、判断字符是否在集合中、求集合的交集、并集等。
f) 成绩(字母 A、B、C、D 和 F) :载体集是 { A, B, C, D, F }。操作有比较大小(如 A > B )、转换为对应的数值分数等。
2、对于常见的抽象数据类型(ADT),要么指明该ADT在某种编程语言中是如何实现的,要么描述如何使用某种编程语言的功能来实现载体集中的值,并简述该ADT的操作可能如何实现。
-
字符ADT :选择ASCII字符集,其载体集是ASCII字符集。操作可能包括大小写转换、字符分类(判断是否为字母、数字、空白、标点、可打印字符等)以及整数与字符的转换。在编程语言中实现时,可使用对应语言的字符处理函数来完成这些操作。
-
位串ADT :载体集是所有有限位序列的集合,包括空串。操作有补码、移位、合取、析取、连接和截断等。实现方式多样,例如可用“0”和“1”的字符串、字符数组或列表、布尔数组或列表、整数数组或列表来表示位串。若用字符串表示,位串连接操作可通过字符串连接操作实现;若用数组或列表表示,两个位串的连接是一个新的数组或列表,其大小为两个参数数据结构大小之和,先将第一个位串的位复制到结果数组或列表的初始部分,再将第二个位串的位复制到剩余部分。
-
布尔ADT :在Java中实现为
boolean类型,在C++中实现为bool类型。 -
整数ADT :在Java中实现为
int和long类型,在Ruby中实现为Integer类。 -
字符串ADT :在Java和Ruby中实现为
String类。
3、选择一种你熟悉的语言,列出它的简单类型和结构类型。
以 Ruby 语言为例,简单类型有:
- 整数(Integer)
- 布尔值(Boolean)
- 字符串(String)*(在 Ruby 中字符串可视为简单类型)
- 浮点数(Floating point)
- 符号(Symbol)
结构类型有:
- 数组(Arrays)
- 类(Classes)
- 集合(Sets)
- 范围(Range)
注 :
Ruby 中没有单独的字符类型,且 Ruby 没有内置的枚举(Enumerations)和记录(Records)类型。
4、选择一门你熟悉的语言,将其简单类型和结构化类型与 Ruby 的简单类型和结构化类型进行比较。是否存在一种语言中的类型是简单类型,而在另一种语言中对应的类型是结构化类型的情况?哪种语言的简单类型或结构化类型更多?
以 Java 为例,Java 中有简单类型(基本数据类型),如 int 、 float 、 char 等,这些类型的值不能再细分。在 Ruby 中,与之对应的 Integer 、 Float 等也是简单类型,不过 Ruby 是纯面向对象语言,所有类型都是类,而 Java 有非类的基本数据类型。
在 Java 里,数组是结构化类型,可包含多个相同类型的元素;在 Ruby 中, Range 是结构化类型,其值可拆分为单个元素。
Java 的简单类型有 int 、 float 、 double 、 char 、 boolean 等;Ruby 的简单类型除了与 Java 对应的数值类,还有 Symbol 、 String 等。从提及的类型来看,Ruby 有更多种类的简单类型。
在结构化类型方面,Java 有数组、集合类(如 List 、 Set )等;Ruby 有 Range 等,难以简单判定哪种语言的结构化类型更多。
抽象数据类型与容器结构解析

最低0.47元/天 解锁文章
8万+

被折叠的 条评论
为什么被折叠?



