欢迎来到基础数据结构!

在你的计算机科学学习之旅中,你已经使用过变量来存储单一信息,例如姓名或分数。但如果你需要存储 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 中特别需要数组,则必须导入像 numpyarray 这样的模块。

常见错误:尝试访问不存在的索引。如果数组有 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)(循环)来处理这些结构中的数据。

逐步教学:打印一维数组

  1. 从 0 到数组长度减 1 开始执行循环。
  2. 在循环内部,使用循环计数器作为索引
  3. 打印该索引处的元素。

逐步教学:搜索二维数组

  1. 使用嵌套循环 (Nested Loop)(即循环中的循环)。
  2. 外层循环遍历每一
  3. 内层循环遍历该行中的每一
  4. 检查 [行][列] 处的值,看它是否与你要寻找的目标相符。

考试重点总结

  • 数据结构是用于组织数据以使其发挥效用的方法。
  • 静态结构(如传统数组)具有固定的长度。
  • 动态结构(如列表)可以增加或缩小。
  • 索引0 开始。
  • 二维数组使用两个索引:\( array[row][column] \)
  • 在 Python 中,列表是存储这些集合最常见的方式,但为了应对课程大纲,你必须理解数组的理论。

快速复习区:
问:静态数据结构的主要优点是什么?
答:它在内存使用上很有效率且访问速度快,因为其大小和在内存中的位置是固定的。

问:如果一个数组有 10 个元素,最后一个元素的索引是多少?
答:9(因为我们是从 0 开始算的!)。