Bootstrap

数据结构(00)

1.序:

`数据结构`将与`菜鸟的Leetcode之路`不定时更新,也是一个系列的内容,将会包含许多的数据的逻辑结构,物理结构,数据运算。(具体怎么说,我也不太明白,我的理解是:对于不同类型数据,进行不同的排序和存储,通过指针和数组,方便后续算法对其`增加,删除,修改,查询`。)呃,正如英雄哥所言:数据结构就好比子弹,而算法是枪身。所以说在解决问题路上的话,可能遇到一些特殊的问题,使用特殊的子弹,会有更好的解决方案。

1.逻辑结构和物理结构

数据结构是计算机存储、组织数据的方式,包括逻辑结构和物理结构,并定义了相关的数据运算。

它研究数据的组织和存储方法,以及在这些数据上进行操作的算法。具体来说,数据结构主要包括三个方面的内容:逻辑结构、物理结构和数据的运算。

1.逻辑结构(略,后续文章一一介绍)

描述了数据元素之间的逻辑关系,与它们在计算机中的存储方式无关。逻辑结构可以分为:

`集合、线性结构、树形结构和图形结构`。 

例如,

线性结构中的元素是一对一的关系,典型的线性结构有数组、栈和队列。

树形结构则是一对多的关系,如公司组织结构。图形结构则用于描述多对多的关系,比如社交网络中的朋友关系。

2.物理结构

则表明数据在计算机`内部的存储形式`,常见的存储结构有`顺序存储`、`链式存储`、索引存储和散列存储。(后面两个我目前没用过)

顺序存储结构通过元素在内存中的相对位置来表示它们之间的逻辑关系,

而链式存储则通过指针建立元素之间的联系。

2.物理结构(详)

1.顺序存储

顺序存储结构通常使用连续的内存空间,比如数组。

对于顺序存储而言,由于其元素在内存中连续存放,使得随机存取效率极高,时间复杂度为O(1)。

顺序存储的`优点`在于其存储空间利用率高,因为它不需要额外的空间来存储指针或其他结构信息。同时,由于其连续性,对CPU缓存的利用也更加友好,有助于提高访问效率。

顺序存储的`缺点`也同样显而易见。当需要插入或删除元素时,可能需要移动大量元素来填补或腾出空间,这导致操作的时间复杂度上升到O(n)。

顺序存储结构的存储空间不易动态扩展,一旦分配,大小通常固定,这限制了其灵活性。

从性能角度考虑,如果应用场景中需要频繁地进行随机存取操作且插入和删除操作较少,顺序存储结构可能是更佳选择;相反,若系统需频繁插入和删除数据,则链式存储结构可能更为合适。此外,考虑到内存的使用和优化,顺序存储更适合数据规模相对固定的场景,而链式存储则能更好地应对数据规模的动态变化。

综上所述,顺序存储和链式存储各有千秋,无一定优劣之分,关键在于根据具体的应用需求、性能指标及资源限制做出恰当选择。理解这两种存储结构的特点及其优缺点,有助于在设计和实现数据结构及算法时作出更合理的决策,从而优化系统的总体性能。

2.链式存储

链式存储结构则是通过指针将多个分散的存储单元连接起来形成链表。

链式存储的最大优势则在于其动态性和灵活性。在链表中添加或移除节点只需改变相邻节点的指针,无需移动其他元素,时间复杂度可降至O(1)。此外,链表的存储空间可以按需分配,更易于适应数据规模的动态变化。

但这种灵活性是有代价的:链式存储的随机存取效率低于顺序存储,因为必须从头结点逐个遍历直至找到目标节点,时间复杂度为O(n)。同时,由于每个节点除了存储数据外还需存储指针信息,导致`存储空间`利用率相对较低。

3.存储空间

1. 存储密度
   顺序存储结构:由于顺序存储结构在内存中占用连续的空间,且所有分配的空间都用于数据存储,没有任何额外空间损失,因此其存储密度为1。这意味着所有的空间都有效地被利用来存储数据项,未浪费任何存储资源。
   链式存储结构:链式存储的节点不仅包含数据本身,还必须包含指向其他节点的指针。这些指针占据了一定的存储空间,但并不直接存储用户数据,因此链式存储结构的存储密度小于1。具体来说,每个节点由数据域和指针域组成,后者(指针域)减少了有效数据的存储比例。
2. 存储空间利用率
  顺序存储结构:顺序存储的一大优势是高存储空间利用率。因为所有分配的内存块都被用来存储数据,没有任何额外的空间开销。这在资源受限的环境中尤其重要,可以最大化地使用每一份内存资源。
 链式存储结构:尽管链式存储提供了动态内存管理和方便的插入、删除操作,但由于需要额外的空间来存放指针,其存储空间利用率相对较低。每个节点都需要额外的空间来存放指针,这导致实际可用于数据存储的空间减少。

4.总结

从`性能`角度考虑,如果应用场景中需要频繁地进行随机存取操作且插入和删除操作较少,顺序存储结构可能是更佳选择;相反,若系统需频繁插入和删除数据,则链式存储结构可能更为合适。

此外,考虑到`内存的使用和优化`:

顺序存储更适合`数据规模相对固定的场景`

链式存储则能更好地应对`数据规模的动态变化`

综上所述,顺序存储和链式存储各有千秋,无一定优劣之分,关键在于根据具体的应用需求、性能指标及资源限制做出恰当选择。理解这两种存储结构的特点及其优缺点,有助于在设计和实现数据结构及算法时作出更合理的决策,从而优化系统的总体性能。

总的来说,数据结构的选择和设计对于提高数据处理效率和资源利用具有重要意义。

;