欢迎来到数据结构的世界!
你有没有试过在一大堆杂乱无章的 LEGO 积木中寻找特定的一块?这很难吧?但如果你把积木按颜色或大小分类放到不同的盒子里,你就能在几秒钟内找到需要的东西。
在计算机科学中,数据结构 (Data Structures) 就是那些“盒子”。它们是组织和存储数据的特定方式,能让计算机更有效率地寻找和使用信息。在本章中,我们将探讨 AQA 课程要求你掌握的两种主要数据组织方式:数组 (Arrays) 和 记录 (Records)。
1. 什么是数据结构?
数据结构是一种专门用于组织、处理、存储和检索数据的格式。如果没有它们,程序就会变成一堆混乱且零散的变量。
比喻: 想象一所学校。如果每个学生的资料都只是随意写在纸条上并丢进一个箱子里,校长永远都找不到任何资料!相反,他们会使用“学生档案”(一种数据结构)来将一切整理得井井有条。
快速复习:为什么要使用它们?
- 它们能让代码更易于阅读。
- 它们让我们能处理大量数据(例如 1,000 名用户的名单),而无需建立 1,000 个不同的变量。
- 它们能加快计算机搜索信息的速度。
2. 数组 (Arrays)——整齐的排列
数组 (Array) 是一组相同数据类型的资料集合,它们存储在同一个名称之下。你可以把它想象成学校走廊里的一排储物柜。
一维 (1D) 数组
1D 数组就像一个简单的清单。要找到特定的项目,你需要使用它的索引 (index)(即它的位置编号)。
重要规则: 在编程中,我们几乎总是从 0 开始计数,而不是 1!这被称为零基索引 (zero-based indexing)。
例子: 一份高分清单: \( scores = [95, 87, 92, 78] \)。
\( scores[0] \) 是 95。
\( scores[1] \) 是 87。
二维 (2D) 数组
2D 数组就像一个网格或表格,它有行 (rows) 和列 (columns)。要在这里找到一个项目,你需要两个索引编号:一个代表行,一个代表列。
比喻: 想想电影院的座位表或棋盘。要找到你的座位,你需要知道行号和座位号。
例子: 用于井字过三关 (Tic-Tac-Toe) 的 2D 数组:
\( board[0][0] \) 会是左上角的格子。
\( board[2][2] \) 会是右下角的格子。
记忆法:“RC”可乐
查看 2D 数组时,请永远记住先看 Rows(行),再看 Columns(列)!\( Array[Row][Column] \)。
重点总结: 当你有一个类型相同的项目清单时(例如,一串整数或一串字符串),请使用数组。
3. 记录 (Records)——数码文件夹
有时,我们想存储关于同一事物的不同类型信息。例如,如果你正在编写一个关于汽车的程序,你可能需要同时存储“品牌”(String)、价格 (Real) 和车门数量 (Integer)。这时就需要记录 (Record)。
记录允许你将不同的数据类型归纳在同一个名目下。记录中的每一项信息都被称为字段 (field)。
记录定义示例
根据 AQA 课程大纲,汽车的记录在伪代码中可能看起来像这样:
RECORD Carmake : String
model : String
reg : String
price : Real
noOfDoors : Integer
ENDRECORD
你知道吗? 在 Python 等语言中,我们通常使用“字典清单 (Lists of Dictionaries)”或“类 (Classes)”来完成记录的工作,但在考试中,你应该将其理解为记录 (Record) 的概念。
别担心,这看起来可能有点复杂!
只要记住:
1. 数组 = 相同东西的清单(像一盒鸡蛋)。
2. 记录 = 关于同一个东西,但不同类别的信息集合(像一本显示你的姓名、年龄和照片的护照)。
重点总结: 当你需要存储不同类型的相关数据(例如学生的姓名、测试分数,以及他们是否及格)时,请使用记录。
4. 常见错误
- 从 1 开始计数: 记住,数组的第一个项目永远是在索引 \( 0 \)。如果数组有 5 个项目,最后一个索引就是 \( 4 \)。
- 在数组中混合类型: 在大多数编程语言中,你不能将字符串和整数放在同一个数组中。这时请改用记录!
- 混淆行与列: 在 2D 数组中,总是先横向找行 (row),再纵向找列 (column)。
总结检查清单
快速复习:你可以...
- 解释什么是数据结构吗?
- 识别 1D 数组和 2D 数组之间的区别吗?
- 解释为什么我们使用索引编号吗?
- 描述什么是记录,并说出它的组成部分(字段)吗?
- 说明什么时候使用记录比使用数组更好吗?