Data structures 什么是抽象数据类型(ADT)?
我遇到了以下“抽象数据类型”的定义,我无法理解。有人能解释一下吗,最好是举个例子 抽象数据类型定义为组成数据类型的数据对象的数学模型以及对这些对象进行操作的函数Data structures 什么是抽象数据类型(ADT)?,data-structures,Data Structures,我遇到了以下“抽象数据类型”的定义,我无法理解。有人能解释一下吗,最好是举个例子 抽象数据类型定义为组成数据类型的数据对象的数学模型以及对这些对象进行操作的函数 用某种语言来说,不管怎样,我可以给你以下信息: Stack make_stack(); void push(Stack stack, value); value pop(Stack stack); 然后我可以说,假设你想把三个值推到堆栈上,然后弹出一个。可能是这样的: Stack my_stack = make_stack(); pu
用某种语言来说,不管怎样,我可以给你以下信息:
Stack make_stack();
void push(Stack stack, value);
value pop(Stack stack);
然后我可以说,假设你想把三个值推到堆栈上,然后弹出一个。可能是这样的:
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 */
这是一个抽象数据类型:我定义了一个新类型,一个堆栈,并为您提供了一个抽象接口。也就是说,我以Stack
的形式为您提供了组成数据类型的数据对象,并提供了对其进行操作的函数make_Stack
、push
和pop
堆栈可以通过列表、数组、堆或其他完全不同的方式来实现,并且没有外部可见的方式来知道是什么。您所知道的是,有一个特定的API与它一起使用,该API保证您获得类似堆栈的行为。此堆栈是一种抽象数据类型。在某些语言中,不管是什么,我可以给出以下内容:
Stack make_stack();
void push(Stack stack, value);
value pop(Stack stack);
然后我可以说,假设你想把三个值推到堆栈上,然后弹出一个。可能是这样的:
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 */
这是一个抽象数据类型:我定义了一个新类型,一个堆栈,并为您提供了一个抽象接口。也就是说,我以Stack
的形式为您提供了组成数据类型的数据对象,并提供了对其进行操作的函数make_Stack
、push
和pop
堆栈可以通过列表、数组、堆或其他完全不同的方式来实现,并且没有外部可见的方式来知道是什么。您所知道的是,有一个特定的API与它一起使用,该API保证您获得类似堆栈的行为。此堆栈是一种抽象数据类型。感谢Lyons的宝贵回复。还有一个疑问是抽象数据类型是否是从基本数据类型(int、float、char)派生的一种用户定义的数据类型?我不知道您在问什么。抽象数据类型可以由语言或用户提供。它不能是纯本机类型,因为它公开了实现,但它可以封装一个。谢谢Lyons,谢谢你宝贵的回复。还有一个疑问是抽象数据类型是否是从基本数据类型(int、float、char)派生的一种用户定义的数据类型?我不知道您在问什么。抽象数据类型可以由语言或用户提供。它不能是纯本机类型,因为这会公开实现,但它可以包装一个实现。