欢迎来到魔幻小生的博客

软件设计师:数据结构

复杂度

大O表示法

image

时间复杂度

image

空间复杂度

image

image

定义的数据占用多少空间就是空间复杂度

image

image

image

image

image

渐进符号 了解 直接蒙吧

image

递归

复杂度

image

image

image

递归式 看不懂

image

image

image

image

线性结构

定义

image

线性表的存储结构

image

通过索引快速查询到线性表中的元素,效率高,但是插入和删除会批量移动,效率低;查询快,增删慢

  • 顺序存储插入元素需要移动的元素个数:n/2
  • 顺序存储删除元素需要移动的元素个数:(n-1)/2

顺序存储

插入元素

image

  • 最好的情况就是直接在顺序表后面插入一个元素,时间复杂度为O(1)
  • 最坏的情况是在插入一个元素到原来第一个元素的位置,时间复杂度为O(n)
  • 平均复杂度为O(n)

删除元素

image

  • 最好的情况就是直接在删除最后一个元素,时间复杂度为O(1)
  • 最坏的情况是删除第一个元素,时间复杂度为O(n)
  • 平均复杂度为O(n)

查找元素

image

时间复杂度为O(1)

链式存储

image

插入元素

image

image

image

删除元素

image

查找元素

image

image

image

image

先进后出

用栈实现递归调用

image

image

不需要遍历链表就能入栈/出栈操作

image

image

image

image

队列

先进先出

image

不需要遍历链表就能入队/出队操作

image

image

image

image

栈+队列的题

入队和出队序列一定相同,入栈和出栈序列不一定相同

image

image

image

image

image

串 了解 出了就不要了

image

字符构成的序列

  • 空串:长度为0的串
  • 空格串:由空格组成的串

image

image

举个例子试

串的模式匹配和朴素匹配 了解 出了就不要了

image

image

image

image

数组

image

image

image

image

矩阵 代入法

对称矩阵

image

只存储下三角区

A[i,j]=A[j,i]

image

三对角矩阵

image

左下、右上为0 可不存储

稀疏矩阵

image

做题技巧:按行存储 每行开始 1 2 3 ... n

image

A[1,1]=3 代入验算

image

A[1,2]=2 代入验算

image

image

image

纯背

image

image

  • 度:结点的子结点个数
  • 树的度:所有结点的度的最大值
  • 高度(深度):树的高度

image

image

保证每个结点都有m个子结点

image

image

image

记不住公式就代入法

二叉树

image

度最大为2

image

image

  • 满二叉树:叶子结点外的结点的度均为2

  • 完全二叉树:从根结点起,从上到下、从左到右依次填满结点的二叉树

image

image

image

image

记不住公式就代入法

二叉树顺序存储结构

image

image

非完全二叉树没结点的地方也占用空间,造成空间浪费

二叉树链式存储结构

image

image

  • 二叉链表:空指针n+1个 指向左、右结点
  • 三叉链表:空指针n+2个 指向左、右、父结点

image

image

image

image

二叉树遍历

image

image

image

image

image

  • 先序遍历:根 左 右
  • 中序遍历:左 根 右
  • 后序遍历:左 右 根
  • 层次遍历:从上到下一层一层遍历

中序遍历+任一序遍历可以构造二叉树 必须有中序遍历

image

image

image

image

平衡二叉树 一定是完全二叉树

image

二叉排序树

image

左<根<右

关键字和根结点比较,小于放左边,大于放右边

image

10必须为根结点

image

image

image

image

最优二叉树(哈夫曼树)

image

所有(叶子结点到根结点路径长度*结点的值)之和

和最小的二叉树为最优二叉树(哈夫曼树)

image

构造的哈夫曼树不唯一,WPL值唯一

构造哈夫曼树

  • 权值越大离根节点越近
  • 给定的权值节点为叶子节点
  • 每个非叶子节点度都为2
  • 总的节点为给定的节点的(2倍-1)

  • 从前往后找两个权值最小
  • 小左大右加入末尾(若构造完的权值和原本的权值一样,那么构造完的放右边 )
  • 权值相同从前往后
  • 用时再调用

image

image

哈夫曼编码

暂时跳过

暂时跳过

image

image

查找

image

image

主要考二分查找

image

顺序查找 顺序/链表存储

image

二分查找 顺序存储 有序

image

image

image

image

image

哈希表 HashMap

冲突:不同关键字映射到相同存储位置

image

计算哈希地址,冲突了就+1再次计算,+2再次计算,直到不冲突

image

image

image

image

image

堆 基于完全二叉树

image

  • 大顶堆:父结点大于子结点
  • 小顶堆:父结点小于子结点

image

image

image

image

image

直接代入 k[i]和k[2i] k[2i+1]作比较

posted @ 2024-05-14 00:48  魔幻小生  阅读(29)  评论(0编辑  收藏  举报