数据结构详解与实践应用
在算法程序的运行过程中,数据的流动与组织是核心环节。为了高效管理数据,我们需要根据数据的特性和用途,定义不同的数据结构类型(简称数据类型)。数据类型按实现方式可分为原始类型(系统定义的最小单元)和复合类型(基于原始类型组合的复杂结构),同时需要通过数据容器承载具体数据,形成完整的数据管理体系,下面让我们一起进入数字世界:
一、原始类型:数字世界的“最小砖块”
原始类型是系统直接定义的基础数据类型,不可再分,是构成所有复杂数据结构的“原子单元”。在 E3 环境中,核心原始类型及特性如下表所示,且每种类型在可视化画布中都有专属识别颜色,便于区分。
| 类型标识 | 画布识别颜色 | 中文名称 | 核心说明 | 典型示例 |
|---|---|---|---|---|
int | 整数 | 32 位有符号整数,用于表示无小数的数值(如计数、编号) | 15、2024、-30 | |
float | 小数 | 双精度浮点数(尽管标识为 float),用于表示带小数的数值 | 1.75、3.14、-0.5 | |
bool | 布尔值 | 仅包含两个取值的逻辑类型,用于表示“是/否”“真/假” | true(真)、false(假) | |
str | 字符串 | 由字符组成的文本类型,用于表示文字信息,需用引号包裹 | "张三"、"S2024001"、"篮球" |
TIP
原始类型的运算功能(如 int/float 的加减乘除)需通过“隐藏操作”调用:从数据的输出/输入端拖出连线,在空白处松开鼠标,弹出的菜单中会在 Operators 分组下显示可用运算符。
二、数据容器:数字世界的“专属住所”
抽象的数据类型需要通过具体的“容器”承载,才能在程序中存储和使用。数据容器的核心作用是“给数据安家”,明确数据的存储形式(单个、多个有序、键值映射)。在 E3 中,双击空白处调出搜索框,在 Create 分组下可创建以下三种核心容器:
| 容器类型 | 图标 | 核心作用 | 存储规则 | 适用场景 |
|---|---|---|---|---|
Item | 存储单个元素 | 仅能容纳 1 个数据,数据类型可任意(原始类型/复合类型) | 存储单一信息(如房间的面积、层高、朝向编号) | |
List | 存储多个有序元素 | 可容纳多个数据,元素顺序固定(支持按索引访问),元素类型可任意(允许混合类型) | 存储批量有序信息(如房间的门窗列表、楼层的房间列表) | |
Dict | 存储键值对映射关系 | 以 str 类型作为“键(key)”,值(value)类型可任意;通过“键”快速查找“值”,键唯一不重复 | 存储有明确对应关系的信息(如建筑的设施资源:键为“公共区域”,值为区域列表) |
IMPORTANT
请记住各类容器的图标形状,在实际操作中,会有实心和空心的区别,连接上数据流的会变成实心,颜色也会根据类型不一样有所不同,这很重要。
关于容器的使用请阅读使用变量
三、复合类型:数字世界的“复杂建筑”
如果说原始类型是“砖块”,复合类型就是用砖块砌成的“房子”“小区”——它通过字段(数据的“容器标签”)将原始类型或其他复合类型按规则组合,形成能承载多维度、关联信息的复杂结构。
TIP
这一小节只讲概念,实操请阅读类型设计
1. 核心概念:字段(Field)
字段是复合类型的“灵魂”,相当于 Excel 表格的“列标题”,但更灵活:
- 定义数据含义:明确该位置存储的信息类别(如“房间号”“设计师”“设施资源”);
- 限定存储规则:指定该位置的数据容器和数据类型(如“面积”字段用
Item容器存储float类型); - 支持嵌套组合:字段的值可以是复合类型(如“房间列表”字段用
List容器存储房间对象这种复合类型)。
2. 场景化实例:从房间到建筑群的复合类型设计
以“存储建筑群信息”为例,从最基础的“房间”到最高层的“建筑群”,通过复合类型的嵌套,实现数据的分层关联管理:
(1)基础层:房间类型(单个房间的信息)
相当于 Excel 中“房间表”的一行,包含单个房间的所有核心信息,字段均基于 Item 或 List 容器存储原始类型。
| 字段名 | 数据内容 | 容器类型 | 数据类型 | 说明 |
|---|---|---|---|---|
| 房间号 | R201 | Item | str | 房间唯一标识,文本类型 |
| 用途 | 办公室 | Item | str | 房间功能,文本类型 |
| 面积 | 35 | Item | float | 房间面积(㎡),小数类型 |
| 层高 | 2.8 | Item | float | 房间高度(m),小数类型 |
| 是否朝南 | true | Item | bool | 朝向状态,布尔类型 |
| 设备列表 | 办公桌、投影仪、空调 | List | str | 多个设备,字符串列表 |
结构可视化:
房间对象(复合类型)
├─ 房间号: "R201"(Item → str)
├─ 用途: "办公室"(Item → str)
├─ 面积: 35(Item → float)
├─ 层高: 2.8(Item → float)
├─ 是否朝南: true(Item → bool)
└─ 设备列表: ["办公桌", "投影仪", "空调"](List → str)(2)中间层:楼层类型(多个房间 + 楼层信息)
相当于“楼层表”与“房间表”的组合,包含楼层自身信息和该楼层的所有房间,其中“房间列表”字段嵌套了“房间类型”这种复合类型。
| 字段名 | 数据内容 | 容器类型 | 数据类型 | 说明 |
|---|---|---|---|---|
| 楼层编号 | F2 | Item | str | 楼层唯一标识,文本类型 |
| 层高 | 3.2 | Item | float | 楼层标准高度,小数类型 |
| 房间列表 | R201、R202、R203 等 8 个房间 | List | 房间对象列表 | 楼层所有房间,嵌套复合类型 |
结构可视化:
楼层对象(复合类型)
├─ 楼层编号: "F2"(Item → str)
├─ 层高: 3.2(Item → float)
└─ 房间列表: [房间1, 房间2, ..., 房间8](List → 房间对象)
├─ 房间1: 房间号: "R201"、用途: "办公室"、...(完整房间对象)
├─ 房间2: 房间号: "R202"、用途: "会议室"、...(完整房间对象)
└─ ...(其余6个房间对象)(3)顶层:建筑群类型(多栋建筑 + 园区信息)
包含建筑群自身信息、所有建筑,以及带键值映射的公共设施,同时嵌套“建筑类型”复合类型和 Dict 容器。
| 字段名 | 数据内容 | 容器类型 | 数据类型 | 说明 |
|---|---|---|---|---|
| 园区名称 | 科技产业园 | Item | str | 园区全称,文本类型 |
| 建成时间 | 2010 | Item | int | 建成年份,整数类型 |
| 建筑列表 | A栋、B栋、C栋 | List | 建筑对象列表 | 园区所有建筑,嵌套复合类型 |
| 公共设施 | 停车场、绿化带、充电桩 | Dict | 键(str)→ 值(List) | 设施类别与具体设施的映射,值为列表 |
结构可视化:
建筑群对象(复合类型)
├─ 园区名称: "科技产业园"(Item → str)
├─ 建成时间: 2010(Item → int)
├─ 建筑列表: [建筑1, 建筑2, 建筑3](List → 建筑对象)
│ ├─ 建筑1: 建筑编号: "A栋"、层数: 12、楼层列表: [...](完整建筑对象)
│ ├─ 建筑2: 建筑编号: "B栋"、层数: 8、楼层列表: [...](完整建筑对象)
│ └─ 建筑3: 建筑编号: "C栋"、层数: 5、楼层列表: [...](完整建筑对象)
└─ 公共设施: {(Dict → str 键 → List 值)
"停车场": ["地面停车场", "地下一层停车场"],
"绿化带": ["中心花园", "西侧绿廊"],
"充电桩": ["A栋充电桩", "B栋充电桩"]
}3. 复合类型的核心价值
通过上述嵌套结构,复合类型实现了以下关键作用:
- 分层查询:可从顶层到底层精准定位数据(如“科技产业园 → A栋 → 2楼 → R201 → 面积”),无需跨多个表格查找;
- 统一扩展:如需新增信息(如给所有房间增加“承重数据”字段),只需修改“房间类型”的定义,所有房间对象会自动支持该字段;
- 关联保护:修改上层信息不影响下层(如修改A栋的设计师为“李工”,不会改变该栋楼房间的面积、设备等信息);
- 结构自描述:字段名和嵌套关系直接体现数据含义(如“公共设施”字段下的“停车场”键,清晰说明对应值是停车场列表)。
四、关键关系辨析
1. 类型与对象的关系
- 类型(Type):是“模板”,定义数据的结构规则(如“房间类型”定义了必须包含“房间号、用途、面积”等字段,以及每个字段的容器和类型);
- 对象(Object):是“实例”,基于类型模板创建的具体数据(如“R201房间”是“房间类型”的一个对象,“A栋”是“建筑类型”的一个对象);
- 类比:“房间类型”相当于“房间档案模板”,“R201的档案”相当于“房间对象”——模板统一格式,实例填充具体内容。
2. 复合类型与 Excel 的核心区别
复合类型的多维嵌套结构,解决了 Excel 二维表格的局限性,具体差异如下:
| 对比维度 | Excel(二维表格) | 复合类型(多维结构) |
|---|---|---|
| 存储形式 | 仅支持“行(记录)× 列(字段)”的平面结构 | 支持 Item/List/Dict 嵌套,可表达“字段包含字段”的多维关系 |
| 复杂信息处理 | 需拆分字段或用特殊符号分隔(如“设备列表”存为“办公桌,投影仪”),无法直接体现嵌套 | 可直接用 List 存储“设备列表”,用嵌套复合类型存储“建筑包含楼层” |
| 数据关联 | 需通过“主键”(如房间号)跨表格关联,查询效率低 | 嵌套结构自带关联关系(如楼层对象直接包含房间列表),查询更直接 |
| 灵活性 | 字段类型固定,新增维度需新增表格 | 可动态嵌套复合类型,新增维度只需在对应层级加字段 |
简单来说:Excel 像“纸质表格”,只能平面记录;复合类型像“多层文件夹”,可在“园区文件夹”里放“建筑子文件夹”,“建筑子文件夹”里放“楼层文件”和“设施清单”,数据组织更贴合真实世界逻辑。
五、实践总结
数据结构的设计核心是“按需组织”:
- 若需存储单个基础信息(如面积、层高):用 原始类型 + Item 容器;
- 若需存储批量有序信息(如房间列表、设备清单):用 原始类型/复合类型 + List 容器;
- 若需存储键值映射信息(如公共设施、配置参数):用 任意类型 + Dict 容器;
- 若需存储多维度关联信息(如房间、楼层、建筑):用 复合类型(字段嵌套),通过分层设计实现数据的清晰管理。
掌握原始类型、数据容器、复合类型的组合逻辑,就能灵活构建适配不同场景的数据结构,为算法程序的高效运行奠定基础。