总结自印度的顶尖程序员 Harsha Suryanarayana 的数据结构课程,并对原课程的未尽之处进行了补充。
一些例子
- 我们能从字典中找到想要的单词,是因为词汇按照某种顺序排序;
- 地图上的所有数据都是以一种几何方式组织的;
- 一家公司的账簿是以表格的形式记录的;
计算机可以存储几乎各种类型的数据,我们在开发软件的时候就需要使用科学的方式组织数据。
数据结构的正式定义
A data structure is a way to store and organize data in a computer, so that it can be used efficiently.
数据结构是一种在计算机中存储和组织数据的方式,使得数据可以被更高效地使用。
我们从两个角度讨论数据结构
(一)数学/逻辑模型(抽象数据类型 ADT)
- 更高、更抽象的视角;
- 例如一台电视机,可以开/关、接受信号、播放视频/音频,而不需要考虑电视的品牌、内部结构;
- 例如一个列表,存储数字/任何类型的元素,可以按位置读取/修改;
- 我们做的只是定义一个模型,可以用编程语言以多种方式实现,所有高级语言都已经有了这种 ADT 的具体实现;
(二)具体的实现(Implementation)
- 实现的是具体的类型,而不是抽象的类型;
- 我们可以在一门语言中,同很多方式,实现相同的 ADT。
例如在 C/C++ 中 Linked List(链表)是 List(列表)的一种具体的实现方式,链表也是课程的重点;
抽象数据类型的正式定义
- 抽象数据类型:
Abstract data types define data and operations, but no implementations.
作为数据和操作的定义,它没有实现任何细节;
我们将要讨论数组、链表、栈、队列、树、图等;
我们将要研究它们的逻辑、操作和操作的时间/空间成本、以及如何用编程语言做具体的实现。

