欢迎来到数据类型与结构的世界!
在本章中,我们将学习计算机是如何组织信息的。你可以把“数据类型”想象成厨房里各种形状的容器——你总不会把汤放在筛子里,或者把面粉装在浅盘子里吧?同样地,计算机也会使用特定的“容器”来高效地存储不同类型的数据。无论你是要编写一个简单的计算器还是开发复杂的游戏,理解这些结构都是成为优秀程序员的第一步。如果起初觉得这些概念有点抽象,不用担心——我们会运用大量生活中的例子来帮助你理解!
10.1 数据类型与记录 (Data Types and Records)
在计算机处理数据之前,它必须知道这是什么种类的数据。这就是所谓的数据类型 (Data Type)。
基本数据类型
在 9618 教学大纲中,你需要熟悉以下特定类型:
• INTEGER (整数): 整数 (例如:10, -5, 1000)。
• REAL (实数): 带有小数点的数据 (例如:3.14, -0.5, 2.0)。
• CHAR (字符): 单个字符 (例如:'A', '!', '5')。
• STRING (字符串): 一串字符或文字 (例如:"Hello World")。
• BOOLEAN (布尔值): 只能是 TRUE (真) 或 FALSE (假)。
• DATE (日期): 代表特定的日子 (例如:25/12/2024)。
什么是记录 (Record)?
有时候,我们会想将不同类型的数据组合在一起,因为它们属于同一个“事物”。这被称为记录 (Record)。
现实生活中的例子: 想象一张图书证。它包含了 STRING (书名)、INTEGER (书本 ID) 和 DATE (还书日期)。所有这些不同类型的数据都被归纳在同一个“记录”之下。
在伪代码中定义记录
若要建立一个记录,我们使用特定的结构。以下是你如何定义一个 Student (学生) 记录的方法:
TYPE StudentRecord
DECLARE Name : STRING
DECLARE Age : INTEGER
DECLARE IsEnrolled : BOOLEAN
ENDTYPE
快速复习: 记录让我们能够将多个相关项目视为一个整体,使我们的程序组织得更有条理!
10.2 数组 (Arrays)
数组 (Array) 就像学校里一排排的储物柜。每个储物柜的大小都相同,用途也一样,而且每个柜子都有编号,方便你找到它。
数组的关键术语
• Index (索引): 项目在数组中的“地址”或位置。
• Lower Bound (下界): 起始索引 (通常为 0 或 1)。
• Upper Bound (上界): 数组中的最后一个索引。
• 1D Array (一维数组): 单行数据。
• 2D Array (二维数组): 数据网格 (就像带有行和列的电子表格)。
重要规则: 数组中的所有项目必须属于相同的数据类型。你不能拥有一个同时存储整数和字符串的数组!
搜索与排序数据
一旦数据进入数组,我们通常需要进行搜索或排序。
1. 线性搜索 (Linear Search - “逐一检查法”)
想象你在衣服堆里找某件特定的衬衫。你拿起第一件检查,然后是第二件,依此类推,直到找到为止。这就是线性搜索。它很简单,但如果数组非常大,速度可能会很慢。
2. 冒泡排序 (Bubble Sort - “交换法”)
这是一种将数组排序的方法。它的运作方式是比较两个相邻的项目。如果它们顺序错误,就进行“交换”。这个过程不断重复,直到最大的项目像气泡一样“浮”到列表的末端。
常见错误: 使用二维数组时,要时刻记住哪个索引代表行 (Row),哪个代表列 (Column)。通常写作 MyArray[Row, Column]。
重点总结: 数组用于存储相同类型的多个项目。列表用一维数组,表格用二维数组。
10.3 文件 (Files)
为什么我们需要文件 (Files)?我们存储在变量或数组中的所有东西都保存在计算机的 RAM (内存) 中。当你关闭计算机时,RAM 就会被清除。为了永久保留数据,我们必须将其存储到硬盘或 SSD 的文件中。
在考试中,你会看到关于这些的伪代码:
• OPENFILE: 告诉计算机你想使用哪个文件。
• READFILE: 从文件中读取数据以供程序使用。
• WRITEFILE: 将数据写入文件以进行存储。
• CLOSEFILE: 使用完毕后一定要记得“锁门”!
你知道吗? 文本文件本质上就是一长串存储在磁盘上的字符,你的程序会逐行读取它们。
10.4 抽象数据类型 (ADT) 简介
抽象数据类型 (Abstract Data Type, ADT) 是一种数据集合,对于如何新增或删除项目有一套特定的规则。我们通常使用数组来实现 ADT。
1. 堆栈 (Stack - LIFO)
LIFO 代表 Last In, First Out (后进先出)。
类比: 想象食堂里的餐盘叠。最后叠上去的餐盘,一定是第一个被拿走的。
• Push (入栈): 将项目新增到最上方。
• Pop (出栈): 从最上方移除项目。
2. 队列 (Queue - FIFO)
FIFO 代表 First In, First Out (先进先出)。
类比: 电影院的排队人潮。第一个排进队伍的人,就是第一个买到票的人。
• Enqueue (入队): 将项目新增到队尾。
• Dequeue (出队): 从队首移除项目。
3. 链表 (Linked List)
链表是由“节点 (nodes)”组成的集合。每个节点包含数据以及指向列表中下一个项目的指针 (Pointer)。
类比: 寻宝游戏。你找到一条线索 (数据),该线索会告诉你下一条线索在哪里 (指针)。如果指针为 Null (空),则表示你已经到达了列表的末端。
差异总结表
• 堆栈 (Stack): 使用单一指针 (堆栈顶部)。顺序:LIFO。
• 队列 (Queue): 使用两个指针 (队首与队尾)。顺序:FIFO。
• 链表 (Linked List): 使用指针连接节点;项目在内存中不一定要连续存储。
记忆小撇步: 记住 "S-L-Q-F" — Stacks (堆栈) 是 LIFO,Queues (队列) 是 FIFO!
最后的鼓励: 你刚刚已经掌握了计算机处理数据的核心方法!虽然指针和冒泡排序的逻辑可能有点棘手,但只要不断想象那些生活中的例子,像是储物柜、衣物堆和食堂餐盘,你一定能行!加油!