首页 > 其他分享 >数据结构(00)

数据结构(00)

时间:2024-07-20 11:59:01浏览次数:14  
标签:00 存储 指针 链式 数据结构 数据 顺序存储 结构

1.序:

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

1.逻辑结构和物理结构

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

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

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

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

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

例如,

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

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

2.物理结构

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

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

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

2.物理结构(详)

1.顺序存储

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

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

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

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

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

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

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

2.链式存储

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

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

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

3.存储空间

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

4.总结

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

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

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

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

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

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

标签:00,存储,指针,链式,数据结构,数据,顺序存储,结构
From: https://blog.csdn.net/2302_79189136/article/details/140479124

相关文章

  • 山东大学数据结构与算法实验8散列表(线性开型寻址/链表散列)
    A : 线性开型寻址题目描述要求使用线性开型寻址实现描述给定散列函数的除数D和操作数m,输出每次操作后的状态。有以下三种操作:插入x,若散列表已存在x,输出“Existed”,否则插入x到散列表中,输出所在的下标。查询x,若散列表不含有x,输出“-1”,否则输出x对应下标。......
  • 数据结构-线性表、链表
    一、线性表介绍1、线性结构​ 在数据元素存在非空有限集中:存在唯一的一个被称为“第一个”的数据元素存在唯一的一个被称为“最后一个”的数据元素除了第一个外,集合中每个数据元素都只有一个前趋元素除了最后一个外,集合中每个数据元素都只有一个后继元素2、线性表线性表......
  • PYTHON学习笔记(六、python数据结构--字典)
    (3)dict字典字典数据类型的含义是:根据一个信息查找另一个信息的方式构成了“键值对”,它表示索引用的键和对应的值构成对应的关系。1、字典的创建方式1)使用{ }直接创建字典使用{ }创建字典的语法结构如下:d={key1:value1,key2:value2......}例如:#使用{}创建字典d=......
  • win10访问共享打印机提示0x0000011b错误原因分析及解决方法
          2024年十大技术难题之“共享打印机报0x0000011b错误”该问题一直存在,该问题是由于Win10更新补丁后大面积出现打印机无法共享。即使目前最新的Win1022h2镜像还是没有修复打印机共享BUG,虽然微软发布了最新更新补丁,越更新越有问题。不过此工具可以修复最近出现......
  • 数据结构:栈
    数据结构:栈满足栈的特性,只有先进后出的特性,不能遍历,也就不能遍历打印,也不能随机访问。栈栈:栈是在处理数据时是先进后出、就是先进栈的数据最后一个出栈、最后一个进栈的数据第一个出栈、栈就类似于给一把手枪弹夹压子弹,给弹夹压子弹的顺序就如同数据进栈的顺序,第一颗子......
  • 数据结构(队列)
    文章目录一、概念与结构二、队列的实现QueueNode.hQueue.c初始化判断队列为空队尾,入队列队头,出队列取队头数据取队尾数据取队列有效元素个数销毁队列test.c一、概念与结构......
  • 数据结构_排序
    目录一、排序二、插入排序2.1直接插入排序2.2希尔排序三、选择排序3.1直接选择排序3.2堆排序四、交换排序4.1冒泡排序4.2快速排序五、归并排序六、排序算法分析总结一、排序排序:就是使一串记录序列,按照其中某个或某些关键字的大小,进行递增或递减的排列......
  • 【数据结构】学习day 1.1线性表中的顺序表
    1 "&"区别(c++)#include<stdio.h>voidtest(intx){   x=2024;   printf("intestx=%d\n",x);}intmain(){   intx=1;   printf("beforetestx=%d\n",x);   test(x);   printf("aftertestx=%d\n"......
  • 数据结构——哈希
    前言顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(logN),搜索的效率取决于搜索过程中元素的比价次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得......
  • G69 前缀线性基+贪心法 CF1100F Ivan and Burgers
    视频链接:G69前缀线性基+贪心法CF1100FIvanandBurgers_哔哩哔哩_bilibili   IvanandBurgers-洛谷|计算机科学教育新生态(luogu.com.cn)//前缀线性基+贪心法O(30*n)#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;......