了解抽象数据类型 (ADT)
PHP 有八种原始数据类型,分别是布尔、整数、浮点数、字符串、数组、对象、资源和 null。此外,我们必须记住,PHP 是一种弱类型语言,在创建数据类型时,我们不需要理会数据类型声明。虽然 PHP 有一些静态类型的特性,但 PHP 主要是一种动态类型的语言,这意味着在使用变量之前不需要声明变量。我们可以为一个新变量赋值并立即使用它。
对于我们迄今为止讨论过的数据结构示例,我们是否可以使用任何原始数据类型来表示这些结构呢?也许可以,也许不可以。我们的原始数据类型有一个特定的目标:存储数据。为了在对这些数据执行操作时实现一定的灵活性,我们需要以这样的方式使用数据类型,以便将它们用作特定的模型并执行某些操作。这种通过概念模型处理数据的特殊方式被称为抽象数据类型(Abstract Data Type,简称 ADT)。ADT 还定义了一组可能的数据操作。
我们需要明白,ADT 主要是理论概念,用于算法、数据结构和软件设计的设计和分析。相比之下,数据结构是具体的表示。为了实现 ADT,我们可能需要使用数据类型或数据结构,或者两者兼而有之。最常见的 ADT 例子是堆栈和队列:

将堆栈视为 ADT,它不仅是数据的集合,还是两个重要的操作,即 push 和 pop。通常,我们会在栈顶放入一个新条目,这就是所谓的 push,而当我们要取出一个条目时,就会从栈顶取出,这也是所谓的 pop。如果我们将 PHP 数组视为堆栈,就需要额外的功能来实现这些 push 和 pop 操作,从而将其视为堆栈 ADT。类似地,队列也是一个 ADT,它有两个必要的操作:在队列的末尾添加一个项目,也称为 enqueue;从队列的开始删除一个项目,也称为 dequeue。两者听起来很相似,但如果我们仔细观察,就会发现堆栈是后进先出(LIFO)模式,而队列是先进先出(FIFO)模式。这两种不同的数学模型构成了两种不同的 ADT。
下面是一些常见的 ADT:
-
List
-
Map
-
Set
-
Stack
-
Queue
-
Priority queue
-
Graph
-
Tree
在接下来的章节中,我们将探索更多的 ADT,并使用 PHP 将其实现为数据结构。