算法练习(尚硅谷)

4 篇文章 0 订阅

数组

1. 稀疏数组
由二维数组转稀疏数组(数组压缩与解压)
稀疏数组模型,适用数组中大部分是都是重复元素
模型
row行数 | 列数量| value值

链表

单链表
- 单链表反转
- 遍历单链表,新建新节点,将依次将单链表的值插入到新节点的头位置
- 将原链表的头指向新链表的头节点的 .next节点
- 单链表逆序打印
- 方式1 使用单链表反转打印(不推荐,破坏原链表结构)
- 方式2 将节点压入栈中,利用栈的先进后出特点,实现逆序打印

双向链表

单向循环链表(有头节点 和 没有头节点)
在这里插入图片描述

- 约瑟夫(环)问题:编号1~n形成一个环形,约定编号K从1开始报数,数到m的那个人出列,他的下一位又开始从1报数,到m出列,重复。求最后出列的顺序

栈与队列

    • 应用场景
      在这里插入图片描述
    • 使用栈实现计算器的计算
      在这里插入图片描述
    • 前缀、中缀、后缀表达式(逆波兰表达式)计算机计算方式
  1. 队列
    先进先出

  2. 递归

    • 使用场景:
      • 各种数学问题:8皇后问题,汉诺塔,阶乘,迷宫,球和篮子等问题
      • 各种算法中:快排,归并排序,二分查找,分治算法等
      • 将用栈解决的问题-使用递归解决比较简洁。
    • 使用规则,注意事项
      递归使用规则
      1. 迷宫游戏(思考,最短路径问题)
        迷宫游戏策略
      1. 八皇后问题
        介绍:8*8的棋盘上摆放8个皇后,任意两个皇后不能在同一行,同一列,同一斜线上,问有多少种摆法。
        递归算法分析,这里是基础算法,后可以使用贪心算法优化
        八皇后问题

排序算法

  1. 冒泡排序
  2. 选择排序
  3. 插入排序
  4. 希尔排序(插入排序,缩小增量排序)
    希尔排序图解
  5. 快速排序(冒泡排序)
  6. 归并排序
    归并排序图解
  7. 基数排序(桶排序)
    基数排序图解
  8. 堆排序(二叉树的实际应用部分介绍)

查找算法

  1. 线性查找

  2. 二分查找

  3. 插值查找(优化二分查找)
    插值查找原理

  4. 斐波那契查找(黄金分割查找0.618)
    有时候需要对数组扩容

哈希表

二叉树

  1. 二叉树的遍历(可以根据跟节点的输出顺序进行区分)
    • 前序遍历
    • 中序遍历
    • 后序遍历
  2. 二叉树的查找节点
    • 前、中、后三种遍历查找
  3. 二叉树遍历删除节点
  4. 顺序二叉树(基本考虑完全按二叉树)
    • 二叉树可以与数组进行互相转化
    • 顺序二叉树与数组的转化关系如下:
      顺序二叉树
  5. 线索化二叉树
    • 普通二叉树中,叶子节点和缺少分支的节点,存在指针浪费的问题(浪费指针的个数 n+1,其中n 代表当前树节点的个数),为了有效利用指针,可以将浪费的指针指向后继节点(根据二叉树的前、中、后序遍历确认后继节点)
      在这里插入图片描述

    • 线索二叉树规则:
      在这里插入图片描述

    • 线索化二叉树的遍历,不可以使用普通之前的二叉树遍历方式,因为线索二叉树将原空指针连接到了后继节点,不会出现空的现象,所以可以不用递归遍历,可以通过循环遍历线索二叉树即可。

二叉树的实际应用

  1. 堆排序(选择排序 nlogn,不稳定排序)
    • 大顶推(完全二叉树)
      每个节点的值都大于左右孩子的值,成为大顶堆。如下:
      大顶堆

    • 小顶堆 与大顶堆相反。大顶堆通常用于生序,小顶堆用于将序

    • 堆排序基本思想:
      在这里插入图片描述

  2. 赫夫曼树(最优二叉树)
    • 赫夫曼树基本介绍: 赫夫曼树
    • 赫夫曼树举例说明如下:
      在这里插入图片描述
    1. 符合创建赫夫曼树:
  3. 二叉排序树
  4. 二叉平衡树
  5. 2 _3树
  6. b树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xingqsh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值