抽象数据类型、数据结构、算法与Java语言:ADT List

抽象数据类型、数据结构、算法与Java语言:ADT List

导读

为什么要学习数据结构?

数据结构是关于如何组织(存储)数据的!编程实践中经常涉及到组织(存储)数据,所以要学习数据结构。

抽象数据类型、数据结构、算法与Java语言:ADT List

那么为啥还要学习抽象数据类型(Abstract Data Type,ADT)呢?

ADT描述了数据集、指明了在数据集上可能执行的操作。ADT是一种规范,它和具体的编程语言无关。尽管Java API提供多种数据结构,但是如果遇到不适用的情形,就需要针对这种情形定义ADT,然后使用Java实现它。况且如果不深入全面地掌握数据结构这方面的知识,就无法理解和合理的使用Java API提供的数据结构。

数据结构和ADT是什么关系呢?

ADT是一个规范,用于一组值以及对这组值执行的操作。而数据结构是使用编程语言对ADT的实现。

那么如何描述ADT呢?

我们仅描述数据和操作,不指明如何保存数据以及如何实现操作,会考虑一些实现的细节,但与具体编程语言无关。

我们借助UML以及对他们的说明来描述ADT。还可以使用伪代码,不过UML足以说明问题。

设计ADT的步骤是什么呢?

确定行为,然后指定数据和操作,并且考虑特殊情况。

ADT List(线性表)简介

抽象数据类型、数据结构、算法与Java语言:ADT List

生活中的各种清单都可以看做是线性表。我们可以一项一项的将它们列出,一般项与项之间没有什么联系,特别地,我们不会将重复项列到清单中,有可能将最重要的项列到最前面

ADT List与上面的清单最大的不同是,ADT List可以有重复项且也不区分哪一个对象更重要,也就是说不对ADT List排序,ADT List中元素的顺序就是他们按照添加先后的顺序排列的(考虑顺序的ADT被称为ADT Sorted List)。

ADT List(线性表)的规格说明

抽象数据类型、数据结构、算法与Java语言:ADT List

抽象数据类型、数据结构、算法与Java语言:ADT List

抽象数据类型、数据结构、算法与Java语言:ADT List

抽象数据类型、数据结构、算法与Java语言:ADT List


ADT List(线性表)操作细节阐述

关于前置条件:对象不能为null

ADT List可以存储为null的对象,但是上述有些方法的前置条件为给定的对象不能为null,这里假设存储null没有实际意义,如果在设计ADT List确实遇到了存储null的需求,那么可以去掉这个前置条件。

关于前置条件:给定的位置没有超出列表的范围

上述方法还给出前置条件为给定的位置没有超出列表的范围,那么客户在使用的时候,如果遇到给定位置超出列表范围怎么办呢?一般来讲,我们会抛出异常,来提示用户,而不需要客户主动验证给定的位置是否超出列表范围,当然,在实际的编程中,常常先确保给定的位置不会超出列表范围,也就是说,异常是一种保护机制,防止意外发生,而不应用异常代替一般的检验逻辑。

关于前置条件:列表不为空

上述方法中处理add方法外,对于空列表来说,都是没有意义的,那么如何处理在空表上执行这些操作呢?

如果不给这些方法加一个前置条件:表不能为空,那么执行上述操作对程序没有危害,但是等于涉及到的指令再做无用功。一般来讲,我们对这种情况不加提示,也不抛异常。

ADT List(线性表)转换为接口

抽象数据类型、数据结构、算法与Java语言:ADT List

抽象数据类型、数据结构、算法与Java语言:ADT List


分享到:


相關文章: