您当前的位置: 首页 >  数据结构

*DDL_GzmBlog

暂无认证

  • 4浏览

    0关注

    605博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

[数据结构]

*DDL_GzmBlog 发布时间:2021-06-07 18:31:10 ,浏览量:4

目录
  • 线性表
  • 循环队列
    • 入队操作:
  • 稀疏矩阵压缩存储方法
    • 三元顺序表
    • 例题:
    • 快速转置法
  • 广义表
    • 取Tail操作
    • 取表头操作:
    • 只有单个元素的表头 取操作
  • 第六章 树和二叉树
    • 一些基本概念
    • 二叉树
    • 二叉树的性质:
    • 满二叉树
    • 完全二叉树
    • 存储结构
    • 遍历二叉树
    • 二叉树求表达式
    • 由结点线序遍历和中序遍历 构造对应的二叉树
    • 按先序遍历序列建立二叉树
  • 树和森林
    • 树的存储方式
    • 二叉树和树的转换
    • 树的遍历
  • Huffman树
  • 树的习题
  • 一些概念:
    • 遍历图(DFS,BFS)
    • 最小生成树
    • 拓扑排序
    • 关键路径(最长路径)
    • 最短路径
  • 查找
    • 顺序查找
    • 折半查找法
    • 分块查找法
    • 动态查找表
    • 二叉排序树
    • 删除操作
    • 平衡二叉树
    • 动态查找表
    • 哈希表
  • 内部排序
    • 直接插入排序
    • 希尔排序(缩小增量法)
    • 快速排序
    • 堆排序(最坏情况下 Onlogn)
    • 二路归并:(nlogn 稳定的排序算法)
    • 结论:
  • 杂项

线性表

线性表是具有n个 数据元素 的有限序列(n>0)

循环队列

假设A[]存放循环队列的元素 其头尾指针分别为front和rear则队列中的元素个数为(rear-front+m )%m

入队操作:

循环队列存储数组A[] 入队时候的操作为 rear = (rear +1) mod(m+1)

稀疏矩阵压缩存储方法 三元顺序表

当计算所需字节数的时候

别忘记上 第0行的 三个字节 在这里插入图片描述

例题:

在这里插入图片描述

快速转置法

在这里插入图片描述

广义表 取Tail操作

在这里插入图片描述

取表头操作:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

只有单个元素的表头 取操作

在这里插入图片描述

第六章 树和二叉树 一些基本概念

结点的度 : 结点所连孩子的数量

  • 树的度 : 一棵树中最大的结点度数
  • 树的深度 : 树中结点的最大层数
二叉树

二叉树不是树的特殊情况,他们是不同的概念

二叉树的性质:
  • 性质1 : 在二叉树第i层上 最多有2^(i-1)结点(画一个短的二叉树就可以发现了)
  • 性质2 : 深度为k的二叉树至多有2^k - 1 个结点
  • 性质3 : 对任何一棵二叉树T , 其终端结点数为n[0] 度为2的结点数为 n[2] ,则n[0] = n[2]+1
满二叉树

满结点的二叉树 为 满二叉树 是 完全二叉树 的特例

完全二叉树

特点;

所有的叶节点 都出现在第K层或K-1层

  • 性质4: 具有n个结点的完全二叉树的深度为 [log2|n] +1 在这里插入图片描述 答案: 501
存储结构

顺序存储结构

就和 树状数组一样

链式存储结构

二叉链表(左右孩子)

三叉链表(左右孩子双亲) 线索链表

遍历二叉树
  • 投影法求前中后遍历

  • 层次遍历

二叉树求表达式

在这里插入图片描述 在这里插入图片描述

由结点线序遍历和中序遍历 构造对应的二叉树

在这里插入图片描述

按先序遍历序列建立二叉树

在这里插入图片描述

树和森林 树的存储方式

1.双亲表示法 在这里插入图片描述

2.孩子表示法 在这里插入图片描述

3.孩子兄弟表示法 在这里插入图片描述

二叉树和树的转换

树转换成二叉树

树转换成二叉树 反过来即可

左孩子代表 是孩子结点 右孩子代表 是兄弟结点 在这里插入图片描述

森林转换成二叉树 先将森林转换成二叉树 森林转换成二叉树 反过来即可

然后以第一个二叉树为根节点直接拼接上即可 在这里插入图片描述

树的遍历

先根遍历: 先访问根节点在访问子树

后根遍历: 先访问子树再访问根节点

Huffman树

在这里插入图片描述

  • 计算wpl

  • 构建Huffman树

树的习题

在这里插入图片描述

图 一些概念:

连通分量 非连通图的极大连通子图

含有n个结点的有向完全图 边数为: n*(n-1) 有向图则是 /2

邻接多重表 用于表示 无向图 十字链表 用于 存储表示 有向图

遍历图(DFS,BFS) 最小生成树

prim算法

在这里插入图片描述

Kruskal算法

排序 --> 放

拓扑排序

记录入度 入度为0 继续while

关键路径(最长路径) 最短路径 查找 顺序查找

在这里插入图片描述

折半查找法

在这里插入图片描述

分块查找法

分块最好是分成 √n 在这里插入图片描述

动态查找表 二叉排序树

构建 小的放左 大的放右

删除操作

如果有只有一个孩子 直接把孩子拿上来即可

如果有两个孩子 那么比较一下 放着即可

在这里插入图片描述

ASL 当前层数 * 结点个数 / 结点总数

平衡二叉树

ASL 是 log 级别的

左旋右旋

动态查找表 哈希表
  • 除留余数法

处理冲突

  • 链地址法 在这里插入图片描述
内部排序 直接插入排序

将数一个一个插入到表中

每次插入都需要判断插前 or 插后

折半插入排序

就是利用 二分让他找的更快而已

希尔排序(缩小增量法)

每次将距离为d的分组 然后对组内排序

依次缩小d 最后合并

快速排序

选择关键字 然后将大于他的放左边 小于他的放右边

最后在对后面的区间进行同样的操作即可

堆排序(最坏情况下 Onlogn)
  • 如何由一个无序序列建成一个堆

  • 如何在输出堆顶元素之后调整剩余元素使之成为一个新的堆

取ans 将堆顶元素和末尾元素交换 堆顶元素弹出

现在的栈顶元素 和 左右子树较小的根结点互换 一路下取即可

建堆 以序列第一个元素为根建立二叉树,如果当前元素大于根结点则放左边,否则放右边

然后我们从n/2 -> 1 个结点 处理 将当前结点进行交换处理 如果比自己小那么我们就交换 在这里插入图片描述

二路归并:(nlogn 稳定的排序算法)

也是分组然后合并

在这里插入图片描述

结论:

直接插入排序最快 在基本有序或n值较小的情况下

简答排序是稳定的

直接插入排序

折半插入排序

冒泡排序

简单选择排序

杂项

顺序存储方式 并不仅仅用于 存储线性结构 (用数组来存树形结构(非线性)) 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

关注
打赏
1657615554
查看更多评论
立即登录/注册

微信扫码登录

0.0482s