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

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

导读

为什么要学习数据结构?

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

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

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

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

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

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

那么如何描述ADT呢?

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

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

设计ADT的步骤是什么呢?

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

ADT Sorted List(有序表)简介

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

举一个生活中的线性表和有序表的例子,体会一下它们的区别。

假如,你在列出一天要做的事,你拿出一张纸,然后将事情一件一件地写下来,从纸的顶部写起,如果这一天要完成的事情比较多,会写满这张纸,有可能还不够。如果你认为这些事情没有轻重缓急,先做哪一件都行,那么这个列表就是线性表,如果你认为这些事情有的是先做不可的,而且你写的过程中,认为列在上面的事情比下面的事情重要,但是你不可能一下子就将它们按照从上到下的顺序列好,所以,一边写,一边调整位置,最终完成了这个列表,那么这时表就是有序表。

ADT Sorted List(有序表)的规格说明

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

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

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

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


ADT Sorted List(有序表)操作细节阐述

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

因为有序表要对其中的对象进行排序,而null无法排序,除非人为规定null的比较规则。

无根据位置的插入操作

比较列表与有序表,发现没有提供根据位置插入对象的方法。这是为什么呢?

因为,指定插入位置,而我们事先不知道该插入哪个位置才不会破坏表的原有的有序性,这样就无法保证有序性。

不能替换对象

同样地,线性表的replace方法也不能用于有序表,替换行为无法保证表的有序性。

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

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

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

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

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

ADT Sorted List(有序表)转换为接口

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

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


分享到:


相關文章: