You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数据结构与抽象数据类型的区别及相关概念澄清请求

数据结构与抽象数据类型(ADT)概念澄清

我在使用数据结构(Data structure)和抽象数据类型(Abstract Data Type,ADT)术语时一直存在困惑,发现很多人会把二者混用,我自己也没法清晰解释它们的区别,于是查阅了相关资料:

数据结构

定义:数据结构是为高效访问数据设计的组织和存储格式,更准确地说,它是数据值的集合、值之间的关系,以及可对数据执行的函数/操作,属于数据的代数结构,是抽象数据类型(ADT)的实现基础。
示例:各类数组(Array、关联数组)、链表(linked list、双向链表)、二叉搜索树等各类树结构、堆(Heap)、哈希表(hash table)、图(Graph)等。

抽象数据类型(ADT)

定义:在计算机科学中,ADT是数据类型的数学模型,完全从使用者视角通过行为(语义)定义——明确包含该类型的可能取值、可执行的操作,以及这些操作的行为规则。它和从实现者视角出发、负责具体数据表示的数据结构是对立的概念。
示例:List、Map(对应关联数组)、Graph、Tree等。

个人理解

作为有PHP开发经验的后端开发者,我觉得抽象数据类型就像接口或者带抽象方法的抽象类,只定义操作规范;而数据结构就是ADT的具体实现。比如Stack是一个ADT,规定了push、pop等操作,以下是PHP中的实现代码:

class Stack {
    
    private array $data = [];
    
    public function push(string|int $data): void
    {
        array_push($this->data, $data);
    }
    
    public function pop(): string|int|null
    {
        return array_pop($this->data);
    }
}

$stack = new Stack();
$stack->push(1);
$stack->push(2);
$stack->push(3);

$intA = $stack->pop();
$intB = $stack->pop();
$intC = $stack->pop();
$null = $stack->pop();

var_dump($intA, $intB, $intC, $null); // int(3), int(2), int(1), NULL

上面的Stack类就是遵循Stack ADT规则的一种数据结构。

疑问与解答

  1. List、Map、Graph、Tree是否同时属于数据结构和抽象数据类型?
    要看具体语境。当我们说“List是一种ADT”时,指的是它定义了有序集合、支持增删查等操作的行为规范;而当我们说“链表(Linked List)是一种List数据结构”时,指的是List ADT的具体实现。如果只说“List”,可能会因为语境不同被理解为ADT或其某个实现(数据结构),这也是二者容易混淆的原因之一。

  2. 我的上述观点是否大致正确?
    是的,你的理解完全抓住了核心:ADT是行为规范/抽象模型,数据结构是具体实现。用接口/抽象类类比ADT,用具体类类比数据结构,这个比喻非常贴合面向开发者的认知逻辑。

  3. 是否存在可明确区分某事物仅为ADT而非数据结构,或反之的场景?

  • 仅为ADT的场景:比如“Queue”(队列),它只定义了FIFO(先进先出)的操作规则,但本身没有具体的存储和实现逻辑——你可以用数组、链表甚至栈来实现它,Queue本身只是一个抽象的行为模型。
  • 仅为数据结构的场景:比如“哈希表(Hash Table)”,它是一种具体的存储结构,基于哈希函数实现键值对的快速访问,它可以用来实现Map ADT,但哈希表本身是一个具体的实现方案,不是抽象模型。再比如“双向链表(Doubly Linked List)”,是List ADT的一种具体实现,本身是数据结构,而非ADT。
  1. 抽象数据类型是否只是一种设计模式?
    不是。设计模式是针对特定问题的可复用解决方案(比如单例、工厂模式),而ADT是计算机科学中的基础概念,属于数据类型的抽象模型,是定义数据行为的核心框架。它比设计模式更底层,很多设计模式的实现会依赖ADT,但ADT本身不是设计模式。

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 20:34:52