10分钟了解数据结构(严蔚敏&王道版)

全知识整理目录

数据结构整理的目录包括了许多的数据结构相关知识。


概述

本文使用正常人的语序来总结,数据结构的大部分知识点,概念。书本上的反人类话语就不出现了。

诸如:算法的特征,评价算法的优劣标准,非终端节点等常用的概念性,需要理解记忆的总结。

更多更仔细的介绍,需要参考数据结构全知识目录

第一章 基本概念

数据结构:是研究数据的组织,存储,和运算的一般方法。

数据:客观表示事物的符号表示。

数据元素:数据的基本单位,数据元素用于描述一个完整的对象。

数据对象:集合内数据元素的性质相等,就可以称之为数据对象。

抽象数据类型(ADT):不仅包含数据还包含操作集,对外表示细节和操作细节不可见,详解见另一篇专门写的博客ADT详解。

逻辑结构

        集合结构

        线性结构

        非线性结构

                树结构

                图结构或网状结构

存储结构

        顺序存储结构

        链式存储结构

逻辑结构

二元组(D,R)

        D是数据关系的集合

        R是D关系上的集合

        ()表示有序<>表示无序

算法

        特征

                有穷性,确定性,可行性,输入,输出。

        评价算法标准

                正确性,可读性,健壮性,高效性。

第二章 线性表

线性表

由n个数据特征相同的元素构成的有限序列。

空表

n=0的线性表。

非空线性表或线性结构的特点:

存在第一个和最后一个数据元素,出第一个都有前驱,除最后一个都有后继。

顺序表

线性表的顺序存储结构,是一种随机存取的数据结构。

链表

详情见链表的基本操作,链表的基本操作

第三章 栈和队列

先进后出的数据结构。

队列

先进先出的数据结构。

队空的条件:Q.front == Q。rear

队满的条件:(Q.rear+1)%1MAXQSIZE == Q.front

链栈

第四章 串,数组和广义表

        BF算法

        普通的暴力算法,挨个比较。

        KMP算法(KMP详细介绍

广义表

广义表一般记作LS=(a1,a2,a3......an),LS是表名,n是长度。

第五章 树和二叉树

就是有n个节点的有限集。

基本术语

结点的度:结点后继的个数。

树的度:结点度的最大值。

叶子:没有后继的结点。

非终端结点:有后继的结点,除根节点。

树的深度:就是树有多少层。

有序树和无序树:有序是从左到右从上到下依次排列,无序就是随便排。

森林:m(m>0)棵互不相交的树的集合。

        

二叉树

二叉树和树的区别:二叉树是有序树,树不一定是有序树。

二叉树的性质:在二叉树的第i层上最多有2^(i-1)个结点。

公式:终端结点树n0,度为2的结点树n2,那么n0=n2+1。

满二叉树:深度为k且含有2^k-1个结点的二叉树。

完全二叉树:

  • 叶子结点只可能在层次最大的两层出现。
  • 对任意结点,右分支最大层次为L,那么左分支
  • 必定为L或L+1。

具有n个结点的完全二叉树,的深度为[log2n](向下取整)+1。

遍历二叉树

        前序:根左右

        中序:左根右

        后序:左右根

        ps:反正记住,什么序根就在那个位置,依次左右

线索二叉树

概念:线索二叉树分为先序,中序,后序。当序列化一次之后,Rtag或者Ltag置为1,序列那边就将那边置为1。

方法:而线索二叉树,只需要记得以下几点,先序,中序,后序都可以理解:

  •         左孩子存在,为左孩子,左孩子为空,序列化是找到他的前驱。
  •         右孩子存在,为右孩子,右孩子为空,序列化是找到他的后继。
  •         前驱或者后继没有了,就置为NULL。

详细线索二叉树,如这篇博客的介绍-->线索二叉树

平衡二叉搜索树

平衡二叉搜索树,最重要的是平衡因子,平衡因子只能为1,0,-1,超出就需要调整。

左旋转:当前插入平衡因子不满足的节点,向左下滑。

右旋转:当前插入平衡因子,造成右线路问题,需要右旋。

左右旋转和右左旋转:先左单旋,再右单旋,或者反之。

简易方法:只要从下往上,看看到一个平衡因子不满足的,就开始调整,这样左右旋就变成了,相对简易的,先左单旋,再右单旋。

详细介绍平衡二叉搜索树,过程,代码,如下链接-->平衡二叉搜索树

树和森林

哈夫曼树与哈夫曼编码

概念:哈夫曼树是最优二叉树,哈夫曼编码是以最少的字符,包含最多的信息。

构造方式:第一次选出最小权重的,两个结点构成二叉树,以后每次选出一个最小的结点与根节点构成二叉树,根节点权重=左右两个子树权重的和。

详细介绍哈夫曼树与哈夫曼编码-->哈夫曼树与哈夫曼编码

第六章 图

基本术语

度:分为出度和入度,到自己的叫入度,到别人的叫出度。

简单图:(大部分我们所遇见的,题中的图都是简单图):

  1.         不存在重复的边。
  2.         不存在顶点到自身的边。

完全图:任意两节点之间都存在路径(注意可以不是所有边都连通)。

连通图:任意两点都连通。

图的基本概念的详细介绍       

AOE网

关键路径:是代表工程的最长执行时间的。

最早发生时间v(e):最短的执行时间路径。

最迟发生时间v(l):最终最大的执行时间-路径最长耗时。

v(e)=v(l)就是关键路径。

关键路径,最早发生时间,最迟发生时间的详细介绍

图的遍历

深度优先遍历:对应树的先序遍历。

广度优先遍历:对应树的层级遍历。

图的遍历的介绍

最小生成树的几种得到方式

Kruskal算法:朴素的算法,每次全局的选择权值最小的边。

Prim算法:在已插入顶点的基础之上,每次选择出一条能够连接到的权值最小的边。

最短路径的求法:

Dijstra算法:Dijstra算法是求最短路径当中的,一种朴素算法,依据dist数组,每次插入一个顶点之后,对dist数组进行更新。

Floyd算法:相较于Dijstra算法而言,可以求负权值的边,依据的是整个表,每次插入一个顶点之后对表进行更新,最后一个顶点插入之后生成的表,就是最后的最短路径。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ybbgrain

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

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

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

打赏作者

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

抵扣说明:

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

余额充值