静态和动态数据结构之间的主要区别,优缺点是什么?
最常见的数据结构属于哪些类别?
我怎么知道在哪种情况下使用它们?
答案 0 :(得分:17)
从过度简化开始:
只有几种基本类型的数据结构:数组,列表和树。其他所有东西都可以通过使用这两种结构的不同类型来组成(例如,哈希表可以用哈希值的数组实现,每个哈希值用一个列表来处理冲突)。
在这些结构中,数组是静态的(即,当它们对它们执行操作时,它们的存储器占用空间不会随时间变化),而其他所有内容都是动态的(即,在一般情况下,内存占用空间会发生变化)。
两种结构之间的差异可以从上面得出:
还有其他差异,但只有在您的数据可能被排序时才会发挥作用。我不能给出一个广泛的列表,因为有许多动态数据结构对于不同的操作(“添加”,“删除”,“查找”)表现出不同的性能特征,因此它们不能放在同一屋檐下。 / p>
一个非常明显的区别是,排序数组需要在内存中移动(可能很多)东西,而不是“find”,而动态结构通常执行的工作量较少。
所以,回顾一下:
编辑:我没有提到图表,这是另一种动态数据结构,可以说不能用更简单的部分组成(根据定义,树只有一个链接“进入”任何节点,除了root,而图表可能有多个)。但是,在“什么是更好用”场景中,图形无法真正与其他结构进行比较,因为您需要使用图形或不使用图形(其他结构可能表现出不同的性能,但最终它们都支持同一套操作)。
答案 1 :(得分:2)
静态数据结构(SDS)是固定大小的(例如Arrays),分配给它们的内存量在运行时不能改变,而动态数据结构(DDS)(例如链接列表)具有灵活的大小,它们可以增长或根据需要缩小以包含要存储的数据。
SDS是线性数据结构,允许快速访问存储在其中的元素,但与DDS相比,插入/删除操作非常昂贵,因为DDS对元素的访问速度较慢,但插入/删除速度较快。
大多数DS都是动态DS。
如果在实际数据插入之前分配了SDS空间,那么空间可能会浪费或可能不足一些,因此只有在预先知道要插入的确切数据量的情况下才应使用它们,如果是在运行时知道应该使用DDS。
答案 2 :(得分:1)
反之亦然,如果你选择静态则会丢失内存,而在动态情况下,性能会降低。最好的设计会有效地使用数据结构,没有一个完美的答案。
答案 3 :(得分:1)
简单提示
动态数据结构具有以下特征:
静态数据结构具有以下特征:
总而言之,使用动态结构来存储已知但不会更改的一组数据是无效的。在这种情况下使用静态数据结构将节省系统资源,并且还可以更快地访问元素。如果已知数据的大小发生变化,则使用动态结构。