Skip to content

数据结构详解与实践应用

在算法程序的运行过程中,数据的流动与组织是核心环节。为了高效管理数据,我们需要根据数据的特性和用途,定义不同的数据结构类型(简称数据类型)。数据类型按实现方式可分为原始类型(系统定义的最小单元)和复合类型(基于原始类型组合的复杂结构),同时需要通过数据容器承载具体数据,形成完整的数据管理体系,下面让我们一起进入数字世界:

一、原始类型:数字世界的“最小砖块”

原始类型是系统直接定义的基础数据类型,不可再分,是构成所有复杂数据结构的“原子单元”。在 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 中“房间表”的一行,包含单个房间的所有核心信息,字段均基于 ItemList 容器存储原始类型。

字段名数据内容容器类型数据类型说明
房间号R201Itemstr房间唯一标识,文本类型
用途办公室Itemstr房间功能,文本类型
面积35Itemfloat房间面积(㎡),小数类型
层高2.8Itemfloat房间高度(m),小数类型
是否朝南trueItembool朝向状态,布尔类型
设备列表办公桌、投影仪、空调Liststr多个设备,字符串列表

结构可视化

房间对象(复合类型)
├─ 房间号: "R201"(Item → str)
├─ 用途: "办公室"(Item → str)
├─ 面积: 35(Item → float)
├─ 层高: 2.8(Item → float)
├─ 是否朝南: true(Item → bool)
└─ 设备列表: ["办公桌", "投影仪", "空调"](List → str)

(2)中间层:楼层类型(多个房间 + 楼层信息)

相当于“楼层表”与“房间表”的组合,包含楼层自身信息和该楼层的所有房间,其中“房间列表”字段嵌套了“房间类型”这种复合类型。

字段名数据内容容器类型数据类型说明
楼层编号F2Itemstr楼层唯一标识,文本类型
层高3.2Itemfloat楼层标准高度,小数类型
房间列表R201、R202、R203 等 8 个房间List房间对象列表楼层所有房间,嵌套复合类型

结构可视化

楼层对象(复合类型)
├─ 楼层编号: "F2"(Item → str)
├─ 层高: 3.2(Item → float)
└─ 房间列表: [房间1, 房间2, ..., 房间8](List → 房间对象)
   ├─ 房间1: 房间号: "R201"、用途: "办公室"、...(完整房间对象)
   ├─ 房间2: 房间号: "R202"、用途: "会议室"、...(完整房间对象)
   └─ ...(其余6个房间对象)

(3)顶层:建筑群类型(多栋建筑 + 园区信息)

包含建筑群自身信息、所有建筑,以及带键值映射的公共设施,同时嵌套“建筑类型”复合类型和 Dict 容器。

字段名数据内容容器类型数据类型说明
园区名称科技产业园Itemstr园区全称,文本类型
建成时间2010Itemint建成年份,整数类型
建筑列表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. 复合类型的核心价值

通过上述嵌套结构,复合类型实现了以下关键作用:

  1. 分层查询:可从顶层到底层精准定位数据(如“科技产业园 → A栋 → 2楼 → R201 → 面积”),无需跨多个表格查找;
  2. 统一扩展:如需新增信息(如给所有房间增加“承重数据”字段),只需修改“房间类型”的定义,所有房间对象会自动支持该字段;
  3. 关联保护:修改上层信息不影响下层(如修改A栋的设计师为“李工”,不会改变该栋楼房间的面积、设备等信息);
  4. 结构自描述:字段名和嵌套关系直接体现数据含义(如“公共设施”字段下的“停车场”键,清晰说明对应值是停车场列表)。

四、关键关系辨析

1. 类型与对象的关系

  • 类型(Type):是“模板”,定义数据的结构规则(如“房间类型”定义了必须包含“房间号、用途、面积”等字段,以及每个字段的容器和类型);
  • 对象(Object):是“实例”,基于类型模板创建的具体数据(如“R201房间”是“房间类型”的一个对象,“A栋”是“建筑类型”的一个对象);
  • 类比:“房间类型”相当于“房间档案模板”,“R201的档案”相当于“房间对象”——模板统一格式,实例填充具体内容。

2. 复合类型与 Excel 的核心区别

复合类型的多维嵌套结构,解决了 Excel 二维表格的局限性,具体差异如下:

对比维度Excel(二维表格)复合类型(多维结构)
存储形式仅支持“行(记录)× 列(字段)”的平面结构支持 Item/List/Dict 嵌套,可表达“字段包含字段”的多维关系
复杂信息处理需拆分字段或用特殊符号分隔(如“设备列表”存为“办公桌,投影仪”),无法直接体现嵌套可直接用 List 存储“设备列表”,用嵌套复合类型存储“建筑包含楼层”
数据关联需通过“主键”(如房间号)跨表格关联,查询效率低嵌套结构自带关联关系(如楼层对象直接包含房间列表),查询更直接
灵活性字段类型固定,新增维度需新增表格可动态嵌套复合类型,新增维度只需在对应层级加字段

简单来说:Excel 像“纸质表格”,只能平面记录;复合类型像“多层文件夹”,可在“园区文件夹”里放“建筑子文件夹”,“建筑子文件夹”里放“楼层文件”和“设施清单”,数据组织更贴合真实世界逻辑。

五、实践总结

数据结构的设计核心是“按需组织”:

  1. 若需存储单个基础信息(如面积、层高):用 原始类型 + Item 容器
  2. 若需存储批量有序信息(如房间列表、设备清单):用 原始类型/复合类型 + List 容器
  3. 若需存储键值映射信息(如公共设施、配置参数):用 任意类型 + Dict 容器
  4. 若需存储多维度关联信息(如房间、楼层、建筑):用 复合类型(字段嵌套),通过分层设计实现数据的清晰管理。

掌握原始类型、数据容器、复合类型的组合逻辑,就能灵活构建适配不同场景的数据结构,为算法程序的高效运行奠定基础。