数据结构 思想与角度

本文最后更新于 2025年9月10日 下午

什么是数据结构?

数据结构是一种对数据在计算机中组织和访问方式的系统化描述。

数据类型与数据结构

从广义上来说,基础数据类型也可以理解为”数据结构“,只不过它的组织方式相对简单。当我们声明基础类型变量并编译加载到内存后,这些声明就转化为具体的内存地址与偏移量信息。程序实际运行时,CPU根据这些地址信息定位到对应的内存段进行处理。

例如:

1
2
3
4
5
int a, b, c;
a = 5;
b = 3;
c = a + b;
printf("%d", c);

编译器会将这些代码翻译为机器指令。运行时,CPU根据编译生成的地址通过寻址方式从内存中取出运算所需的数据
在这里,通过“起始地址”和“偏移量”两个要素,计算机就能完成对数据的定位与访问。这正是内存视角下数据结构的本质: 通过明确的组织要素实现对数据的有效管理

声明结构与实际结构

在学习数据结构之前,我们需要认识到:程序中的结构声明,并不总是等同于数据在内存中的实际布局。

在 C 语言中,声明与内存布局大部分情况下是一致的。例如:

1
int array[] = {1,2,3,4,5,6,7,8};

在内存中,这 8 个整数会连续存储,我们可以直接通过起始地址和偏移量访问任意元素。

而在高级语言中情况更复杂。Python 中的:

1
lst = [1,2,3,4,5,6,7,8]

或者 Java 中的:

1
String s = "codfish";

它们的内存组织方式往往与声明形式差异很大。例如,Python 列表底层是动态数组,保存的是对象引用而非直接的整数;而 Java 的 String 实际上是对象,内部依赖字符数组存储,还包含对象头与方法表引用。

这种差异是高级语言为了支持动态类型、垃圾回收等机制而作出的设计取舍。理解这一点,对我们选择合适的数据结构、避免性能陷阱非常重要。

结构与结构的关联

除了数据的存储组织,我们还需要重点关注数据间的关联方式。CPU最终处理的是以特定编码形式存储在内存中的数据,这意味着我们设计数据结构时,需要同时解决两个核心问题:

  1. 结构中包含哪些元素 - 定义数据的组织方式
  2. 结构中的数据如何关联 - 定义查找、遍历、访问的方法

通过精心设计这些关联方式,我们可以高效地在结构中定位下一个元素,或对整个结构进行遍历操作。

结构设计的最终目标

数据结构的根本目的是什么?是通过数据间结构化的高效关联,提升应用系统的查询和访问效率。

恰当的数据结构能像扁担一样,让相同的操作效率倍增,合适的数据结构能显著提升整个系统的处理能力。在计算机系统中,CPU、内存、IO、网络构成了我们的主要资源。如何选择和设计恰当的数据结构来满足应用需求,充分利用这些系统资源,正是我们学习数据结构的最终目标。

总结

通过上述分析,我们可以看到,数据结构的学习实际上是一个从”理解底层”到”优化应用”的过程。

从底层角度看,所有的数据结构最终都会映射到内存中的地址空间,通过”起始地址+偏移量”的方式进行访问。这是不变的底层规律。但在应用层面,我们需要在这个基础上构建更复杂、更高效的组织方式,来解决实际问题中的各种访问需求。

当我们面对一个具体的应用场景时,选择数据结构的核心考量应该是: 在给定的系统资源约束下,如何通过结构化的设计,最大化地提升目标操作的执行效率 。这可能意味着我们需要在时间复杂度与空间复杂度之间做权衡,在存储成本与访问速度之间找平衡,在实现复杂度与维护成本之间做选择。


数据结构 思想与角度
http://gadoid.io/2025/09/10/数据结构-导论/
作者
Codfish
发布于
2025年9月10日
许可协议