抽象数据类型 abstract data type,ADT:
指只通过接口进行访问的数据类型,我们将那些使用ADT的程序叫做客户,将那些确定数据类型的程序叫做实现。
数据的表示和实现操作函数都在接口的实现里面,和客户完全分离。接口对于我们来说是不透明的:客户不能通过接口看到方法的实现。
优点:
- 将编程时对数据的概念转换从任何特定的数据表示和算法实现中分离出来。
- 使用抽象机制可以让我们关心程序如何实现的细节上得到解放。
- 当程序的性能重要时,我们需要知道基本操作的开销。
栈ADT的实现
栈ADT的实现有两种方式,一是数组实现,二是链表实现。
使用数组实现时,将数据项放进数组中,记录栈顶位置的下标。进行进栈push操作时,只要把项存放到栈顶下标所指示的位置即可,然后下标增1;进行弹栈pop操作时,使下标减1,并返回它所指示的项。初始Initialize操作包含分配指定大小数组,测试是否为空empty操作包含检查下标是否为0.
数组实现的缺点是在使用之前需要知道数组的最大长度,这样才能分配内存。
使用链表实现时,对于pop操作,删除链表表头元素,并返回其项;对于push操作,创建一个节点,然后把其添加到表头。
下推栈的数组实现
当栈中有N个项时,这一实现把这些项保存在s[0],...,s[N-1]中,按照最近插入的顺序排列。栈顶(下一个进栈元素将要占据的位置&#x