1、抽象数据类型
抽象数据类型(abstract data type,ADT)是带有一组操作的一些对象的集合。在 ADT 的定义中没有地方提到关于这组操作是如何实现的任何解释。
Java 类也考虑到 ADT 的实现,不过适当地隐藏了实现的细节。如果由于某种原因需要改变实现的细节,通过仅仅改变执行这些 ADT 操作的例程应该是很容易做到的。这种改变对于程序的其余部分是完全透明的。
对以每种 ADT 并不存在什么法则来告诉我们必须要有哪些操作,这是一个设计决策。错误处理和结构调整(在适当的地方)一般也取决于程序的设计者。
2、表 ADT
我们将处理形如 A0,A1,A2,...,An-1 的一般表。这个表的大小是N。将表的大小为 0 的特殊的表称为空表(empty list)。
与这些“定义”相关的是要在表 ADT 上进行操作的集合。一个方法的功能怎样才算恰当,完全要由程序设计者来决定。
1)表的简单数组实现
对表的所有操作都可以通过使用数组来实现。下列程序段解释一个数组 arr 在必要是如何被扩展:
int[] arr = new int[10];
int[] newArr = new int[arr.length * 2];
for(int i = 0; i < arr.length; i++)
{
newArr[i] = arr[i];
}
arr = newArr;
有时表是通过在高端进行插入操作建成的,其后只发生对数组的访问,在这种情况下,数组是表的一种恰当的实现。然而,如果发生对表的一些插入和删除操作,特别是对表的前端进行,那么数组就不是一种好的选择。
2)简单链表
为了避免插入和删除的线性开销,需要保证表可以不连续存储,否则表的每个部分都可能需要整体移动。
链表由一系列节点组成,这些节点不必在内存中相连,每一个节点均含有表元素和到包含该元素后继元的节点的链(link)。我们称之为 next 链。最后一个单元的 next 链引用 null。
原文地址:https://www.cnblogs.com/Tom-1103/p/12043855.html