[数据结构][基础]基本数据结构

代码优化核心思路

  1. 时间复杂度优化
    • 将代码中的无效计算、无效存储剔除,降低时间复杂度。
    • 设计合理数据结构,完成时间复杂度向空间复杂度的转移。
  2. 空间复杂度优化
    • 降低空间复杂度的核心思路就是,能用低复杂度的数据结构能解决问题,就千万不要用高复杂度的数据结构。
    • 将代码中的无效计算、无效存储剔除,空间复杂度。

常用的分析方法可以参考下面的 3 个步骤:

  • 首先,这段代码对数据进行了哪些操作?

  • 其次,这些操作中,哪个操作最影响效率,对时间复杂度的损耗最大?

  • 最后,哪种数据结构最能帮助你提高数据操作的使用效率?

数据结构

逻辑结构(一般讨论)

  • 集合结构
  • 线性结构
  • 树形结构
  • 图形结构

物理结构

  • 顺序存储结构
  • 链式存储结构

线性表

​ 线性表是使用非常广泛的一类数据结构,它对数据的顺序非常敏感,而且它对数据的增删操作非常灵活。在有序排列的数据中,可以灵活的执行增删操作,就好像是为排好队的数据增加了插队的入口。这既是灵活性也是缺陷,原因在于它的灵活性在某种程度上破坏了数据的原始顺序。在某些需要严格遵守数据处理顺序的场景下,我们就需要对线性表予以限制了。经过限制后的线性表,它们通常会被赋予一些新的名字。

  • 链表

    查找中间位置的元素的值,可以采用快慢指针。

    是否有环也可以用快慢指针

    快慢指针非常重要

  • 数组

    数组就不多介绍了。

    一维数组数组的简单增删查非常简单。数组同时属于线性表的顺序存储。

    数组更适合在数据数量确定,即较少甚至不需要使用新增数据、删除数据操作的场景下使用,这样就有效地规避了数组天然的劣势。在对位置敏感的场景下,比如需要高频根据索引位置查找数据时,数组就是个很好的选择了。

  • 栈----后进先出

    只能在一边进行操作,都在栈顶进行操作

    顺序栈

    链栈

    • 匹配括号

    • 用户访问网页的顺序信息

      维护两个栈

      当用户访问了一个新的页面,则对后退栈进行压栈操作。

      当用户后退了一个页面,则后退栈进行出栈,同时前进栈执行压栈。

      当用户前进了一个页面,则前进栈出栈,同时后退栈压栈。

面对高频使用新增、删除操作,且操作针对最新元素,则可以考虑使用栈。

实际应用:

  • 程序中子程序的调用
  • 函数的递归调用

队列

  • 队列------先进先出

    先进------新增数据只能在队尾进行。

    先出--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值