数据结构基础学习

数据结构

栈:

  • 特点:先进后出,后进先出

队列:

  • 特点:从后端进去,前端出来。先进先出,后进后出

数组

  • 特点:查询快,增删慢的模型,添加效率也低下
  • 查询:通过地址值或者索引值来查找,查询任意数据时间相同
  • 删除效率低下:删除某一个数据,同时后面的数据前面移动
  • 添加效率低下:添加位置后每一个数据后移,在添加元素

链表

  • 每个数据都是一个结点(都是独立的对象,不连续),有一个地址值,包括元素和下一个结点的地址值。

  • 前一个结点记录后一个结点的地址值

  • 链表的查询比较慢,需要从头节点开始

  • 链表的增删快,只需要在对应位置,插上对应的数据的地址,和下一结点的地址值 即可



    树:

    • 节点:每一个元素

节点详解:

  • 度:每一个节点的子节点数量称为度
  • 二叉树:每个节点最多有2个分支的树就是二叉树
  • 树的高度:为层数。层数从上到下
  • 根节点:最上层为根节点
  • 根节点的左子树:(蓝色虚线部分)
  • 根节点的右子节点:(红色实线部分)
  • 二叉查找树:
  • 特点:

    1.每个节点上最多有2个子节点

    2.每个节点的左子节点都小于节点

    3.每个节点的右子节点都大于节点

    • 添加节点规则:

      • 小的存左边,大的存右边,相等不存
    • 查找结点方法:和添加规则一样的


二叉树的遍历方式:

1.前序遍历:从根出发:根->左->右

2.中序遍历:从左出发:左->中(当前结点)->右

3.后续遍历:从左出发:左->右->中

4.层序遍历:从根出发:根->左->右->下一层->根->左->右->

平衡二叉树:

  • 规则:任意结点的左右子树高度差不超过1

    • 平衡二叉树的保持平衡的旋转机制
    • 触发时机:添加一个结点后,该树不是平衡二叉树
      1.左旋
      确定支点:从添加的结点一个个的向上寻找,找到不平衡的点
      旋转:将不平衡的点降级(左子节点),原来不平衡的点下个节点,晋级


    ​ 多种情况:找到不平衡点,将不平衡的右子节点晋升,不平衡点降级,原来的不平衡点的右子节点的左节点,变为不平衡的点的右子节点

    2.右旋

    确定支点:从添加的结点一个个的向上寻找,找到不平衡的点

    和左旋简单版差不多

难度版:找到不平衡点,将不平衡的左子节点晋升,不平衡点降级,原来的不平衡点的左子节点的右节点,变为不平衡的点的左子节点

  • 旋转的配合:一次旋转不能将二叉树进行平衡,只能通过多次旋转

    • 左左,左右
    • 右右,右左

    红黑树:

1972年成为二叉平衡树b树,是一种特殊的查找树,不是规则的树,通过红黑规则实现的

红黑规则:

  • 每一个结点必须是红色,或者是黑色
  • 根节点 必须是黑色
  • 一个结点没有子节点或者父节点 ,则该节点的指针属性为nil ,这些nil视为叶节点 ,每个叶节点是黑色的
  • 红色结点的子节点必须是黑色的(红红不能相联
  • 每一个结点的到叶结点的简单路径上 ,均包含相同数目的黑色节点

红黑树节点的添加规则:

  • 默认添加节点的颜色是红色的这样的效率最高

  • 添加规则多种

  • 红黑树的增删改查性能比较好

image-20230912191405327" style="zoom: 67%;" />

  • 添加规则多种

    外链图片转存中...(img-DgYDbTk2-1694765134852)

  • 红黑树的增删改查性能比较好
相关推荐
变量未定义~7 分钟前
ST表-龙骑士军团【算法赛】
数据结构·算法
a11177617 分钟前
SLAM 学习笔记(三)视觉里程计2(VO) 特征点法
人工智能·笔记·学习
Yang_jie_0322 分钟前
笔记:数据结构(循环队列相关判断条件)
数据结构·笔记
三品吉他手会点灯25 分钟前
嵌入式机器学习 - 学习笔记1.1.2 - 机器学习的局限性与伦理
人工智能·笔记·嵌入式硬件·学习·机器学习
Xpower 1725 分钟前
详细解释 Codex 最近一次功能更新,以及 GPT-5.6 Sol、Terra、Luna 的能力、价格、使用方式和适用场景。
人工智能·python·gpt·学习
Dream_ksw1 小时前
机器学习之基于最小二乘的线性回归正规方程求解公式推导(有监督学习)
学习·机器学习·线性回归
Hesionberger1 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
千寻xun10 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
researcher-Jiang10 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
奋发向前wcx13 小时前
P2590 树的统计 题目解析
数据结构·算法·深度优先