👋 欢迎来到结构化数据的世界!

各位未来的计算机科学家,大家好!本章关于数据结构(Data Structures)的内容极其重要,因为它将带你迈出“一次存储一个数据”的阶段。可以把这想象成一次升级:从把硬币零散地塞进口袋,变成将它们整齐地归类存放在收银机中。

在“编程”部分,学会如何构建数据结构,能让你编写出高效处理海量信息的程序——例如管理全班学生的成绩,或者存储成百上千名客户的详细资料。如果一开始觉得有点绕,别担心;我们将通过简单的类比来拆解这些概念!

什么是数据结构?

数据结构(Data Structure)其实就是一种在计算机中存储和组织数据的方式,目的是为了能够高效地使用和访问这些数据。

想象一下你的厨房:

  • 单一变量(比如 Age)就像一颗单独的土豆。
  • 数据结构(比如数组 Array)就像一袋土豆——将许多相关联的物品归为一类。
  • 另一种数据结构(比如记录 Record)就像一张食谱卡片,它能容纳不同类型的信息(名称:字符串,准备时间:整数,评分:实数)。

核心要点:数据结构帮助我们用一个单一的名字来管理大量相关联的数据,而不需要使用几百个独立的变量名。


1. 一维(1D)数组

什么是一维数组?

一维数组是结构化列表的最简形式。它是一组相同数据类型的数据集合,按顺序一个接一个地存储。

类比:想象一排编号的信箱。每个信箱里装有一条信息,而箱子上的编号就是我们找到它的方式。

一维数组的关键概念
  • 同构(Homogeneous): 所有项(称为元素 Element)必须是相同类型(例如,全为整数,或全为字符串)。
  • 索引(Index,或下标 Subscript): 这是用于访问数组中特定元素的位置编号。根据编程语言的不同,索引通常从 0 或 1 开始。
访问一维数组中的数据(索引)

假设我们有一个名为 Scores 的数组,存储了五名学生获得的积分。

索引 1 2 3 4 5
15 22 18 30 10

要找到分数 18,我们需要查询 Scores[3]。这里的数字 3 就是索引

💡 记忆小贴士: 1D 意味着你只需要一个方向(One Direction)就能找到你的数据——你只需要顺着直线移动即可。

一维数组在编程中的应用

数组非常适合:

  • 存储一周的每日气温。
  • 保存一支队伍中所有队员的名单。
  • 存储密码尝试记录列表。

快速回顾:一维数组

它们是列表。它们存储同一种类型的数据。它们使用一个索引来定位项目。


2. 二维(2D)数组

什么是二维数组?

二维数组是一种将元素组织成网格格式的数组,就像表格或电子表格一样。你可以把它看作是多个一维数组堆叠在一起。

类比:这就像电影院的座位图。要找到你的座位,你需要两个信息:行号 AND 座位号。

二维数组的关键概念

要定位二维数组中的任何元素,你需要两个索引

  1. 第一个索引通常指代行(Row)
  2. 第二个索引通常指代列(Column)

其结构通常描述为(行,列)

访问二维数组中的数据

想象一个名为 Grades 的数组,存储了 3 名学生在 4 次不同测试中的成绩。

第1列 (测试 A) 第2列 (测试 B) 第3列 (测试 C) 第4列 (测试 D)
第1行 (学生 A) 85 70 92 75
第2行 (学生 B) 60 95 88 80
第3行 (学生 C) 90 80 70 99

如果我们想找到学生 B 在测试 C 中的成绩,我们会查找 Grades[2, 3] 的值,即 88。

如果一开始觉得难,不用担心!只需记住:第一个数字告诉你查看哪条水平线(行),第二个数字告诉你横向移动多远(列)。

二维数组的用途

二维数组在以下场景中必不可少:

  • 存储棋盘游戏(比如棋盘上的坐标)。
  • 表示图像(其中每个元素都是像素颜色)。
  • 存储多年来的月度销售数据。

避免常见的错误: 学生有时会把行和列的索引搞反。一定要确认你的程序首先索引的是哪一个(行,列)或(列,行),并始终保持一致!

核心要点: 二维数组将数据存储在网格中,需要两个索引来指定位置。


3. 记录(结构体)

将不同数据类型组合在一起

我们已经学过,数组必须存储相同类型的数据(全是整数或全是字符串)。但如果我们想存储关于某个复杂实体(例如学生)的信息,其中包括文本、数字甚至是布尔值,该怎么办呢?

这就轮到记录(Record)(有时也称为结构体 Structure)登场了。

什么是记录?

记录是相关项目的集合(称为字段 Fields),这些项目可以属于不同的数据类型,它们被组合在同一个名称之下。

类比:图书馆的目录卡片。它将图书标题(字符串)、作者(字符串)和书架号(整数)组合在一起,尽管它们是不同类型的数据。

定义记录结构

在创建记录之前,我们必须先定义它的结构(它所包含的字段)。

示例:为商店库存中的单项商品定义结构:

    

DEFINE RECORD ItemDetails

Name : STRING

ItemID : INTEGER

Price : REAL

InStock : BOOLEAN

END RECORD

访问记录中的数据(字段访问)

定义好结构后,我们就可以创建该类型的变量。让我们利用 ItemDetails 结构创建一个名为 Laptop 的变量。

要访问特定的信息(字段),通常使用“记录变量名”加上点号(`.`)和“字段名”:

  • 查找价格:Laptop.Price
  • 检查是否有货:Laptop.InStock
记录与数组:本质区别
特性 数组 (1D 或 2D) 记录
数据类型 必须是同构的(全是同种类型)。 可以是异构的(混合了不同类型)。
访问方式 使用数字索引访问元素(例如 Array[5])。 使用字段名访问元素(例如 Record.Name)。
你知道吗?

在编程中,记录常用于定义对象或用户自定义类型,使代码更加清晰。如果你要存储 100 名学生的信息,你会创建一个记录数组(Array of Records)!这既结合了记录的结构(用于描述复杂的学生数据),又发挥了数组的列表功能(用于容纳 100 名学生)。

核心要点: 记录将不同类型的数据(字段)组合在一起,以描述一个复杂的实体。


本章总结:组织你的代码

恭喜!你现在已经掌握了编程中组织数据的基本构件。

🧠 数据结构快速回顾

  • 一维数组: 一个简单的列表。需要一个索引。所有项必须是同一种类型
  • 二维数组: 一个网格/表格。需要两个索引(行,列)。所有项必须是同一种类型
  • 记录: 定义一个复杂实体(如学生或商品)。将不同数据类型(字段)组合在一起,通过字段名进行访问。

通过掌握这些结构,你已经准备好编写能够专业地存储和管理数据的强大程序了。继续练习那些索引方法,你很快就能成为专家!