优化 - 数据结构

一、概念

数据结构:数据存储在内存中的顺序和位置关系,选择合适的数据结构能提高内存的利用率。

线性结构
链表结构
树形结构

二、线性结构 

结构 优点 缺点
数组 数据呈线性排列,初始化时就要指定长度且无法更改,会开辟一块连续的内存空间,元素有序可以重复且只能是同一种类型(Object类型数组除外)。 查询快:由于元素是存储在一块连续的内存中,每个元素的地址值都可以通过索引算出。 增删慢:由于初始化后长度固定无法更改,增删元素只能用一个新的数组去存储。
链表 数据呈线性排列,初始化时无需指定长度,节点分散在内存中无须存储在连续的空间内,可以随意改变长度,由一系列节点(每个节点包括数值和指向下一个节点地址的指针)组成,节点有序可以重复。 增删快:只需要修改节点指针的指向,不需要移动复制节点。 查询慢:由于节点是分散在内存中的,只能从第一个元素开始顺着指针往后一个一个查起。
数据呈线性排列,只能在头部操作元素的存取,最后添加的数据最先被取出,LIFO。 优先获取最新数据。 获取旧数据需要先取出新数据。
队列 数据呈线性排列,只能在头部存数据尾部取数据,最先添加的数据最先被取出,FIFO。 优先获取最早数据。 获取旧数据需要先取出新数据。
Map字典(映射)
Set集合

链表

环形链表:尾部节点使用指针指向头部节点,将链表变成环形,这样就没有了首尾的概念,适用于保存固定数量的最新数据。

双向链表:在节点使用两个指针,这样能从前往后也能从后往前遍历,但会增加存储空间,增删也会更耗时。

三、树形结构

结构 优点 缺点
数据成树形排列,自由添加数据但每次都取出最小值。每个节点最多只有两个分支,节点排序顺序为从上到下从左到右,子节点的值大于父节点。因此最小值存储在顶端,增加元素会被放在最后的位置(最下面一行从左往右的空位上,没有就另起一行),然后跟父节点比较,父节点更大就互换位置。取出元素后会将最后位置的元素放在顶点,然后跟子节点比较,子节点更小就互换位置。 每次都取出最小值。 数据越多越慢,树越高,增删后位移比较的次数越久。
二叉树 数据呈树形排列,每个节点最多只有两个分支,节点排序为父节点的值大于左子树上的所有值,小于右子树上的所有值。增加元素从上往下比较,小于节点往左移,大于节点往右移。取出元素如果没有子节点就直接删掉,如果只有一个子节点就直接替代被删除节点的位置,如果有两个子节点就用左子树中最大的节点替代(即左子树一直往右的那个根节点)也能用右子树中最小的值替代(右子树最小值最接近左子树最大值且更大所以没问题)。查找和新增一样。 数据多的时候查找快:二分查找法的树形结构体现。 数据不均衡朝单侧纵向延伸,树变高耗时久。

二叉树

平衡二叉树可以修正形状不均匀的树提高查找效率,也可以增加子节点数。子节点数可以自由设定并且形状均衡的树叫B树。

相关推荐

  1. 优化 - 数据结构

    2024-03-24 13:42:02       18 阅读
  2. SQL笔记 -- 数据库结构优化

    2024-03-24 13:42:02       34 阅读
  3. 15.动态规划:数据结构优化DP

    2024-03-24 13:42:02       41 阅读
  4. C++中的算法与数据结构优化技巧

    2024-03-24 13:42:02       31 阅读
  5. CF1918 D. Blocking Elements [二分+数据结构优化dp]

    2024-03-24 13:42:02       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 13:42:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 13:42:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 13:42:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 13:42:02       18 阅读

热门阅读

  1. 100268. 最长公共后缀查询(字典树查询)

    2024-03-24 13:42:02       16 阅读
  2. 重新了解一下之前的單對象變化問題

    2024-03-24 13:42:02       16 阅读
  3. Bom,事件对象

    2024-03-24 13:42:02       18 阅读
  4. extern c 和extern c++

    2024-03-24 13:42:02       16 阅读
  5. cookie、session和token的区别

    2024-03-24 13:42:02       21 阅读
  6. 读《舞!舞!舞!》有感

    2024-03-24 13:42:02       19 阅读
  7. SpringBoot全局异常处理方法

    2024-03-24 13:42:02       19 阅读
  8. 【Node.js】events

    2024-03-24 13:42:02       21 阅读
  9. 【jvm】young gc full gc

    2024-03-24 13:42:02       16 阅读