前边讲到的栈和队列就是两个典型的抽象数据类型实例。一个抽象数据类型(AbstractDataType,ADT),可以看作一些数据对象以及附加在这些数据对象上的操作的集合。对于栈来说,数据对象集为存储在栈内的数据元素;操作集为元素进栈、元素出栈、判断栈是否为空等操作。对于队列来说,数据对象集为存储在队列内的数据元素;操作集为元素进队、元素出队、判断队是否为空等操作。栈的元素进出栈操作实现了FILO特性,队列的元素进出队操作实现了FIFO特性。因此,栈ADT可以描述为:插入和删除元素只能在一端进行的线性表;队列ADT可以描述为:插入元素只能在一端进行,而删除元素只能在另一端进行的线性表。
ADT重在对功能的描述而不关心具体实现。举例来说,对于栈的入栈操作,可能有多个版本的函数实现,在ADT的描述中,看不到这种具体实现上的区别,它们都是同一个入栈操作。
在考研中涉及的ADT问题:
(1)关于ADT概念的理解
数据对象集,数据关系集和操作集。其中数据对象集和操作集前边已经讲过。数据关系集指的是数据对象的组织方式,如线性表的一对一、树的一对多以及图的多对多关系。
(2)关于ADT的应用
若出现则多数是一些设计题,对于简单的ADT可以用简单的语言描述,如上述栈和队列ADT;较为复杂的最好用类结构体方法描述,下边通过一个例题来说明。
【例3-6】 设计一个图书馆ADT。
分析:
此类题属于开放性题目,没有统一的答案,尽可能完备地描述图书馆的功能即可。
数据集描述:
图书馆要有自己的名字以及一些放书的书架;书架一般没有名字而是有自己的编号,以及若干书;书要有自己的书名、作者名和编号等信息。
操作集描述:(www.daowen.com)
根据书架号查找书架、根据书号查找书、根据书名查找书、根据作者名查找书;以及添加书、删除书、借书、还书操作。
由此可以设计出以下图书馆ADT:
设计ADT的题目要注意以下几点:
1)注意ADT的结构格式,类似于C语言的结构体的写法,如上题的书ADT设计。
2)ADT大括号内用数据对象集、数据关系集和操作集分开,如上题的图书馆ADT设计。
3)考研中出现的题目,一般必有数据对象集。
4)如果数据对象之间有很强的关联性,则应写出合适的数据关系集,如上题书架ADT中,书按照顺序结构关系排列。如果遇到树形结构或图结构的数据关系,则用类似的边集表示方法写出。考研中最可能出现的四种关系:没关系、顺序关系、树形关系和图关系。
5)若有操作集,则写出。
6)不同的数据对象类型,自上而下依次列出,如上题的书ADT。
7)相同类型的数据对象,用集合表示法写出,一般考研中涉及的题目用集合的列举法表示即可,如上题的书架ADT中的书数据对象。
8)不同的操作自上而下依次列出。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。