Static和;之间的差异动态数据结构

时间:2010-05-11 20:23:52

标签: java c++ data-structures

静态和动态数据结构之间的主要区别,优缺点是什么?

最常见的数据结构属于哪些类别?

我怎么知道在哪种情况下使用它们?

4 个答案:

答案 0 :(得分:17)

从过度简化开始:

只有几种基本类型的数据结构:数组,列表和树。其他所有东西都可以通过使用这两种结构的不同类型来组成(例如,哈希表可以用哈希值的数组实现,每个哈希值用一个列表来处理冲突)。

在这些结构中,数组是静态的(即,当它们对它们执行操作时,它们的存储器占用空间不会随时间变化),而其他所有内容都是动态的(即,在一般情况下,内存占用空间会发生变化)。

两种结构之间的差异可以从上面得出:

  • 静态需要提前知道最大尺寸,而动态可以随时调整
  • 静态无论如何都不会重新分配内存,因此您可以保证内存要求

还有其他差异,但只有在您的数据可能被排序时才会发挥作用。我不能给出一个广泛的列表,因为有许多动态数据结构对于不同的操作(“添加”,“删除”,“查找”)表现出不同的性能特征,因此它们不能放在同一屋檐下。 / p>

一个非常明显的区别是,排序数组需要在内存中移动(可能很多)东西,而不是“find”,而动态结构通常执行的工作量较少。

所以,回顾一下:

  1. 如果您需要保证最大内存使用量,除阵列外别无选择。
  2. 如果数据大小有硬上限,请考虑使用数组。数组非常适合主要需要添加/删除操作(保持数组未排序)的问题以及主要需要查找操作的问题(保持数组排序),但不能同时用于两者。
  3. 如果您没有硬上限,或者您需要添加/删除/查找所有内容,请使用适当的动态结构。
  4. 编辑:我没有提到图表,这是另一种动态数据结构,可以说不能用更简单的部分组成(根据定义,树只有一个链接“进入”任何节点,除了root,而图表可能有多个)。但是,在“什么是更好用”场景中,图形无法真正与其他结构进行比较,因为您需要使用图形或不使用图形(其他结构可能表现出不同的性能,但最终它们都支持同一套操作)。

答案 1 :(得分:2)

静态数据结构(SDS)是固定大小的(例如Arrays),分配给它们的内存量在运行时不能改变,而动态数据结构(DDS)(例如链接列表)具有灵活的大小,它们可以增长或根据需要缩小以包含要存储的数据。

SDS是线性数据结构,允许快速访问存储在其中的元素,但与DDS相比,插入/删除操作非常昂贵,因为DDS对元素的访问速度较慢,但​​插入/删除速度较快。

大多数DS都是动态DS。

如果在实际数据插入之前分配了SDS空间,那么空间可能会浪费或可能不足一些,因此只有在预先知道要插入的确切数据量的情况下才应使用它们,如果是在运行时知道应该使用DDS。

答案 2 :(得分:1)

反之亦然,如果你选择静态则会丢失内存,而在动态情况下,性能会降低。最好的设计会有效地使用数据结构,没有一个完美的答案。

答案 3 :(得分:1)

简单提示

动态数据结构具有以下特征:

  • 有效添加,删除或修改元素的能力
  • 弹性尺寸
  • 有效使用资源 - 因为资源是在运行时根据需要分配的。
  • 对元素的访问速度较慢(与静态数据结构比较)

静态数据结构具有以下特征:

  • 不能直接添加,删除或修改元素。如果完成,那将是一个资源消耗过程。
  • 固定尺寸​​。
  • 创建数据结构时分配的资源,即使元素不包含任何值。
  • 更快地访问元素(与动态数据结构相比)

总而言之,使用动态结构来存储已知但不会更改的一组数据是无效的。在这种情况下使用静态数据结构将节省系统资源,并且还可以更快地访问元素。如果已知数据的大小发生变化,则使用动态结构。