数据结构学习笔记

数据结构 学习笔记

Author : Weisswire

Date : 2021/08/31

总论

所选教材为《2022年数据结构考研复习指导》。

这一部分与教材作者无关,是本人在学习之后的理解,以供后续复习查阅。

​ 教材本质上在除去第1章绪论之外,包括数据结构和算法两个部分,其中第2-6章为数据结构,第7-8章为算法(仅包括查找、排序两大类型的算法),同时需要注意的是,在主要介绍数据结构的章节中也会讲解对应的数据结构常用到的算法,在主要介绍算法的章节中也会讲解到算法用到的相应的数据结构(例如:堆)。

​ 与此同时,所有数据结构均围绕第2章中提到的线性表:顺序表链表两种表示形式得以实现(其中栈和队列可以理解为受限的线性表),且都会在对应章节将两种形式实现的数据结构的优劣进行对比。

​ 接下来为了方便理解和查询全书的内容,按照自己的理解建立了如下目录并进行知识点的概括:

目录

基础索引

算法评价

空间复杂度 S(n)
时间复杂度 T(n)

线性表

顺序表

​ 字面意思。

链表

​ 链表又分为单链表、双链表、循环链表、静态链表(如操作系统文件分配表FAT)等组合形式。

数据结构及其算法索引

​ 后进先出(LIFO),n个不同元素进栈,出栈元素不同排列的个数为1/(n+1) C[n(↑) 2n(↓)],上述公式称为卡特兰数。注意栈在求表达式中的应用,中缀、后缀以及前缀表达式的相互转化和计算。

队列

​ 先进先出(FIFO),又分为循环队列、双端队列等多种组合形式。

​ KMP算法。

二叉树

​ 注意完全二叉树、二叉排序树和平衡二叉树。

二叉树的遍历

​ 分为先根遍历、中序遍历、后序遍历和层次遍历。(注意必须有中序遍历配合另一种遍历的结果才能唯一的确定一棵二叉树,考察根据两个序列确定唯一的二叉树)

线索二叉树

​ 用以解决普通二叉树难以寻找前驱的问题。根据tag域的值可以判断对应的位置是线索指针还是左/右孩子。需要注意的是先序线索二叉树找不到前驱,后序线索二叉树找不到后继。

前序入栈,中序出栈(关联 部分的知识点)

B树和B+树

​ B树又称多路平衡查找树,B+树主要用于数据库中,例如:MySQL和Sql Server。

树、森林

​ 树、森林与二叉树的转换可以概括为孩子兄弟表示法,即“左孩子右兄弟”。森林中的树的根结点们可以理解为是兄弟关系。

先根遍历 先序序列
后根遍历 中序序列

同时,树的层次遍历又可以理解为广度优先遍历。

树与二叉树的应用
二叉排序树
平衡二叉树

​ 在插入的时候会出现如下情况:

LL平衡旋转 右单旋转
RR平衡旋转 左单旋转
LR平衡旋转 先左后右双旋转
RL平衡旋转 先右后左双旋转
哈夫曼树和哈夫曼编码

​ 根据字符使用频率确定权值,权值越小路径越长,以此形成哈夫曼树(不唯一),用于压缩等途径。

​ 图主要分为有向图和无向图两种,图的存储方式主要有邻接矩阵法(适合稠密图)、邻接表法(适合稀疏图)、十字链表(适合有向图)和邻接多重表(适合无向图)。

​ 图的遍历主要分为广度优先搜索和深度优先搜索(类似于树的先根遍历)。

散列表

​ 除留余数法常用,之后主要有两种种方法解决冲突:

  1. 开放地址法

    线性探测法、平方探测法、再散列法、伪随机序列法

  2. 拉链法(可以对拉链中的内容进行排序从而优化)

算法索引

查找

顺序查找
折半查找
分块查找

​ 块内的元素可以无序,但块之间是有序的。

排序

​ 若相同的关键字在排序前后的位置没有发生变化则该排序算法稳定。

内部排序

​ 不稳定的排序算法有:简单选择排序、希尔排序、快速排序和堆排序。

插入排序
  1. 直接插入排序

​ 该位置之前的为有序序列,之后的为无序序列。不断的用哨兵元素寻找对应的插入位置,在找到位置之后将其余元素整体右移。

  1. 折半插入排序

  2. 希尔排序

    部分有序→整体有序,逐渐减小增量,直到增量为1

交换排序
  1. 冒泡排序

    每次将一个泡冒上去,直到某一次没有任何交换动作为止。

  2. 快速排序

    以一个元素为中枢,low、high逐个遍历,使中枢左侧比中枢小,右侧比中枢大,不断的递归调用。

选择排序
  1. 简单选择排序

    字面意思,每次选一个最大/小的元素放到最前面。

  2. 堆排序

    这里引入了大顶堆和小顶堆(可以视为一棵完全二叉树),利用堆进行排序时,只需要不断的将顶部的元素拿出,用尾部的补齐再恢复对应的堆即可(只针对根元素进行调整)。

    大顶堆→递增序列,小顶堆→递减序列。

归并和基数排序
  1. 归并排序

    常用的是2路归并不断的递归调用。

  2. 基数排序

    以最高位优先或以最低位优先。

外部排序
多路平衡归并与败者树

​ 类似于武道会的形式,只记录失败者来自哪个归并段,从而减少归并时关键字的比较次数。

置换-选择排序(生成初始归并段)

​ 此方法生成的归并段长短不一。

​ 生成过程中,若工作区中最小的数字无法插入当前归并段,则锁定该区域,直到工作区锁定的元素占满工作区,则该次归并段生成结束,开始生成下一个归并段。

最佳归并树(对长短不一的归并段进行归并)

​ 利用哈夫曼树以实现最佳归并树,必要时需要补长度为0的虚段,且其应当离树根最远。

posted @ 2021-09-01 23:03  Weisswire  阅读(144)  评论(0编辑  收藏  举报