《Data Structure and Algorithm Analysis in Java》第 3 章 - 表

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。

猜你喜欢

转载自www.cnblogs.com/Tom-1103/p/12043855.html
今日推荐