数据结构和算法 (DSA) 简介
数据结构是关于如何以不同结构存储数据。
算法是关于如何解决不同问题,通常是通过搜索和操作数据结构。
关于数据结构和算法 (DSA) 的理论帮助我们有效地利用大量数据来解决问题。
什么是数据结构?
数据结构是存储数据的一种方式。
我们根据拥有什么数据以及想要用它做什么,以不同的方式组织数据。

首先,让我们考虑一个不考虑计算机的例子,只是为了理解这个概念。
如果我们想存储关于我们亲属的数据,我们会使用家谱作为数据结构。我们选择家谱作为数据结构,因为我们拥有关于我们亲属的信息以及他们如何相互关联,并且我们想要一个概览,以便我们可以轻松找到某个家庭成员,比如好几代前的祖先。
在你面前清晰地展示了这样一个家谱数据结构,很容易就能看出,例如,我母亲的母亲是谁——就是“艾玛”,对吗?但如果没有这个数据结构提供的从子女到父母的链接,就很难确定这些个体是如何关联的。
数据结构使我们能够有效地管理大量数据,用于大型数据库和互联网索引服务等用途。
数据结构是创建快速强大算法的必备要素。它们有助于管理和组织数据,降低复杂性,并提高效率。
在计算机科学中,有两种不同的数据结构。
基本数据结构是编程语言提供的用于表示单个值的基本数据结构,例如整数、浮点数、字符和布尔值。
抽象数据结构是使用基本数据类型构建的更高级的数据结构,并提供更复杂和专业的运算。一些常见的抽象数据结构示例包括数组、链表、栈、队列、树和图。
什么是算法?
算法是用于解决给定问题或实现特定目标的循序渐进的指令集。

写在纸上的烹饪食谱就是算法的一个例子,目标是制作某种晚餐。制作特定晚餐所需的步骤被精确地描述了。
当我们谈论计算机科学中的算法时,这些循序渐进的指令是用编程语言编写的,并且算法使用的是数据结构,而不是食物配料。
算法是计算机编程的基础,因为它们提供了执行任务的循序渐进的指令。一个高效的算法可以帮助我们找到我们正在寻找的解决方案,并将一个慢速程序转换成一个更快速的程序。
通过学习算法,开发人员可以编写出更好的程序。
算法示例
- 查找 GPS 导航系统中速度最快的路线
- 导航飞机或汽车(巡航控制)
- 查找用户搜索的内容(搜索引擎)
- 排序,例如按评分对电影进行排序
本教程中我们将要介绍的算法是为了解决特定问题而设计的,并且经常用于处理特定的数据结构。例如,“冒泡排序”算法是为了对值进行排序而设计的,并且用于处理数组。
数据结构与算法结合
数据结构和算法 (DSA) 是相辅相成的。如果不能有效地使用算法来搜索或操作数据结构,那么数据结构就没有多大价值;而本教程中的算法如果没有数据结构来操作,价值也不大。
DSA 是关于寻找高效的方式来存储和检索数据,执行数据操作,并解决特定问题。
通过理解 DSA,你可以
- 决定哪种数据结构或算法最适合给定情况。
- 编写运行更快或内存占用更少的程序。
- 理解如何处理复杂问题并以系统的方式解决它们。
数据结构和算法在哪里需要?
数据结构和算法 (DSA) 几乎被用于所有软件系统,从操作系统到 Web 应用程序。
- 用于管理大量数据,例如在社交网络或搜索引擎中。
- 用于调度任务,以决定计算机应该首先执行哪个任务。
- 用于规划路线,例如在 GPS 系统中查找从 A 到 B 的最短路径。
- 用于优化流程,例如安排任务以便它们能够尽快完成。
- 用于解决复杂问题:从找到打包卡车的最佳方法到让计算机从数据中“学习”。
DSA 在软件世界的几乎所有领域都至关重要。
- 操作系统
- 数据库系统
- Web 应用程序
- 机器学习
- 视频游戏
- 加密系统
- 数据分析
- 搜索引擎
理论和术语
在本教程的后续内容中,我们将需要新的理论概念和术语(新词),以便更好地理解我们将要处理的数据结构和算法。
这些新词和概念将在需要时得到适当的介绍和解释,但这里有一些关键术语的列表,只是为了概览即将到来的内容。
术语 | 描述 |
---|---|
算法 | 一组循序渐进的指令,用于解决特定问题。 |
数据结构 | 一种组织数据以便高效使用的方法。常见的数据结构包括数组、链表和二叉树。 |
时间复杂度 | 衡量算法运行所需时间的度量,取决于算法正在处理的数据量。 |
空间复杂度 | 衡量算法所使用的内存量的度量,取决于算法正在处理的数据量。 |
大 O 符号 | 一种数学表示法,用于描述当自变量趋近于特定值或无穷大时函数的极限行为。在本教程中用于描述算法的时间复杂度。 |
递归 | 一种函数调用自身的编程技术。 |
分而治之 | 一种通过将复杂问题分解为更小、更易于管理子问题,然后解决这些子问题并合并解决方案来解决复杂问题的方法。在使用此方法来编写算法时,通常会使用递归。 |
蛮力 | 一种简单直接的算法工作方式,通过尝试所有可能的解决方案,然后选择最佳解决方案。 |
从哪里开始?
在本教程中,你将首先学习一种数据结构及其匹配的算法,然后再学习下一个数据结构。
在本教程的后面,概念会变得更复杂,因此最好从一开始就按步骤进行教程来学习 DSA。
正如在前一页提到的,在学习本教程之前,你应该至少熟悉一种最常见的编程语言,例如 JavaScript、C 或 Python。
在下一页,我们将介绍两种不同的算法,它们使用仅有的两个整数变量来打印出前 100 个斐波那契数。一种算法使用循环,另一种算法使用一种称为递归的方法。
点击“下一页”按钮继续。