欢迎来到基础数据结构!
在你的计算机科学学习之旅中,你已经使用过变量来存储单一信息,例如姓名或分数。但如果你需要存储 100 个学生的姓名,或者西洋棋比赛中的每一步棋呢?建立 100 个不同的变量简直是场噩梦!这时候,数据结构 (Data Structures) 就能派上用场了。它们让我们能更有效率地组织和存储数据。在本章中,我们将掌握数组 (Arrays) 和列表 (Lists)。
1. 什么是数据结构?
简单来说,数据结构是一种用于组织、处理、检索和存储数据的特殊格式。你可以把它想象成“把衣服随意堆在地板上”与“使用抽屉柜”之间的区别。有了抽屉(数据结构),找到你需要的东西会变得轻松得多!
静态与动态数据结构
这是 Oxford AQA 课程大纲中的重要概念,让我们来拆解一下。数据结构通常分为两大类:
静态数据结构 (Static Data Structures): 这些结构的大小在程序编译时就已经确定,且在程序执行期间无法改变大小。
- 类比:学校里的一排 10 个储物柜。你无法突然在墙中间插入第 11 个储物柜!
- 优点:访问速度非常快,因为计算机确切知道它们占用了多少内存。
- 缺点:如果你没填满所有位置,可能会浪费空间;如果数据太多,则可能空间不足。
动态数据结构 (Dynamic Data Structures): 这些结构可以在程序执行期间扩大或缩小。
- 类比:手机里的数字照片相册。只要还有存储空间,你就可以一直增加照片。
- 优点:它们只会使用当下需要的内存空间。
- 缺点:计算机管理起来稍微复杂一些,这可能会让它们比静态结构稍慢一点。
快速回顾:如果你明确知道要存储多少项目,请使用静态结构。如果项目数量会变动,动态结构就是你的好帮手!
2. 数组与列表
在许多编程语言中,数组是静态数据结构的经典例子,而列表通常是动态的。
了解数组
数组 (Array) 是一个在单一标识符(名称)下存储相同数据类型的一组项目。数组中的每个项目都称为元素 (Element)。
要找到特定的元素,我们使用索引 (Index)。关键点:在计算机科学中,我们几乎总是从 0 开始算起,而不是 1!
示例:如果我们有一个名为 Scores 的数组:[10, 25, 30, 45]
- Scores[0] 是 10
- Scores[1] 是 25
- Scores[3] 是 45
Python 如何处理这个问题
你知道吗? Python 其实不像 C# 或 Java 那样内置“静态数组”。Python 使用的是列表 (lists),它们是动态的。不过,为了应付考试,你应该知道你可以使用列表来解决需要数组的问题。如果你在 Python 中特别需要数组,则必须导入像 numpy 或 array 这样的模块。
常见错误:尝试访问不存在的索引。如果数组有 5 个项目,最后一个索引是 4。尝试访问索引 5 会导致“索引超出范围 (Index Out of Range)”的错误!
3. 二维 (2D) 数组
别担心,这刚开始看起来可能有点棘手!一维数组就像单排储物柜。二维数组就像一整面墙的储物柜,包含行与列。它本质上是数组的数组。
类比:将二维数组想象成一个“电影院座位表”或“电子表格”。
要在二维数组中找到资料,你需要两个坐标:[行][列] (row/column)。
示例:一个名为 Grid 的二维数组
[ "A", "B", "C" ]
[ "D", "E", "F" ]
[ "G", "H", "I" ]
- 要取得 "A",我们使用 Grid[0][0]
- 要取得 "F",我们使用 Grid[1][2](第 1 行,第 2 列)
- 要取得 "G",我们使用 Grid[2][0](第 2 行,第 0 列)
记忆小撇步:请记住 RC(就像 RC 遥控车)——先 Row (行),后 Column (列)!
4. 使用数组与列表
在考试中,你可能会被要求使用迭代 (Iteration)(循环)来处理这些结构中的数据。
逐步教学:打印一维数组
- 从 0 到数组长度减 1 开始执行循环。
- 在循环内部,使用循环计数器作为索引。
- 打印该索引处的元素。
逐步教学:搜索二维数组
- 使用嵌套循环 (Nested Loop)(即循环中的循环)。
- 外层循环遍历每一行。
- 内层循环遍历该行中的每一列。
- 检查 [行][列] 处的值,看它是否与你要寻找的目标相符。
考试重点总结
- 数据结构是用于组织数据以使其发挥效用的方法。
- 静态结构(如传统数组)具有固定的长度。
- 动态结构(如列表)可以增加或缩小。
- 索引从 0 开始。
- 二维数组使用两个索引:\( array[row][column] \)。
- 在 Python 中,列表是存储这些集合最常见的方式,但为了应对课程大纲,你必须理解数组的理论。
快速复习区:
问:静态数据结构的主要优点是什么?
答:它在内存使用上很有效率且访问速度快,因为其大小和在内存中的位置是固定的。
问:如果一个数组有 10 个元素,最后一个元素的索引是多少?
答:9(因为我们是从 0 开始算的!)。