什么是抽象数据类型(ADT)?

tam*_*nov 1 data-structures

我遇到了以下"抽象数据类型"的定义,我无法理解.有人可以解释一下,最好是举个例子吗?

抽象数据类型定义为构成数据类型的数据对象的数学模型以及对这些对象进行操作的函数

Dan*_*ons 5

在某种语言中,无所谓,我可以给你以下内容:

Stack make_stack();
void push(Stack stack, value);
value pop(Stack stack);
Run Code Online (Sandbox Code Playgroud)

然后我可以说,假设您想将三个值推入堆栈然后弹出一个.它可能看起来像这样:

Stack my_stack = make_stack();
push(my_stack, 14);             /* stack now contains: 14 */
push(my_stack, "foo");          /* stack now contains: 14 foo */
push(my_stack, 999);            /* stack now contains: 14 foo 999 */
x = pop(my_stack);              /* x = 999, stack contains 14 foo */
Run Code Online (Sandbox Code Playgroud)

这是一个抽象数据类型:我已经定义了一个新类型,一个堆栈,并且我已经为它提供了一个抽象接口.也就是说,我已经给你构成数据类型的数据对象,正如你所说的那样Stack,我给你的功能make_stack,push并对pop它进行操作.

堆栈可以通过列表,数组,堆或其他东西完全实现,并且没有外部可见的方式来知道什么.您所知道的是,您使用的是特定的API,并且该API可确保您获得类似堆栈的行为.该堆栈是一种抽象数据类型.