数据结构 考研复试常考知识点总结(mini版)

数据结构

数据结构三要素?

  • 逻辑结构:线性和非线性结构;线性结构:线性表;非线性结构:树、图、集合
  • 物理结构:顺序、链式、索引、散列表存储
  • 数据运算:对数据的操作

三者关系:算法的设计取决于逻辑结构,而算法的具体实现依赖于它的存储结构

如何理解:线性表和图的算法设计不同(逻辑结构);而对于同一逻辑结构,如线性表,其不同物理实现(顺序表or链表),对应操作也不一样。(比如对一个线性表进行排序)

算法的五个特性?

算法是对特定问题解决步骤的描述,具有可行性、确定性、有穷性、输入、输出这五个特征

其它特征:正确性、可读性、健壮性(鲁棒性)

数据结构的内涵?讲的什么?

内涵:

  • 计算机的角度来讲,数据结构是计算机存储、组织数据的方式;
  • 数据的角度来讲呢,数据结构的内涵是相互之间存在一种或者多种特定关系的数据集合;

讲的内容:这门课给我们介绍了很多数据结构类型和操作方法,比如栈、队列、顺序表、链表二叉树、图,分析了他们特点和适用场景,让我们对数据如何在计算机中组织、存储有了更深刻的理解。

抽象数据类型是什么?

抽象数据类型ADT:通常是对数据的某种抽象,定义了数据的取值范围及其结构形式,以及对数据操作的集合。比如 程序设计语言中的整型int类型就是一个抽象数据类型。由如下三个部分构成:

  • 数据对象(存储的是什么)
  • 数据关系(逻辑关系)
  • 基本操作(crud、参数列表、初始化、操作结果等)

栈和队列的区别?

栈:是只允许在一端进行插入删除的线性表,特点是先进后出,也就是先进栈的节点后面出,在表达式求值或者递归中会用到。

栈:是只允许在一端进行插,在另一端进行删除的线性表,特点是先进先出,在树的层次遍历和广度优先搜索中会用到。

介绍下优先级队列及其存储结构

优先队列是一个特殊的队列,它的元素出队顺序不是由入队时的顺序决定的,而是由元素的优先级别来决定,优先级越高的元素先出队

应用:用于操作系统的进程调度,让更紧急的进程先执行

结构:优先队列的内部结构一般用来实现

堆(空间)和栈(空间)的区别?

  • 栈空间是由系统自动分配,用来存储局部变量(基本数据类型)、和对象的引用,空间连续,容量小速度快。每当一个函数被调用时,这个函数的调用信息和局部变量都会加入栈中。
  • 而堆空间是由编程人员主动申请的,用来存储对象的实体,只有在new之后才会在堆空间产生对象,空间是链式存放的,不连续

声明:引用数据类型时只是在栈中保存了一个引用数据类型,只有执行new之后才会在堆中创建对象的实体。

总结:分配方式、存储的数据内容、分配速度、更新频率、是否连续、是否造成碎片、线程是否私有问题都不同

介绍下深度优先搜索dfs?

bfs/dfs

dfs:对每一个可能的分支路径深入到不能再深为止(往尽量深去找),并且每个结点只能访问一次,所以要用visited数组保存访问记录。适合判断图中有没有环、拓扑排序、还有计算图中的联通分量个数(油田问题)

优点:能找出所有的解决路径;适合递归,内存需要较少;便于判断图中是否有环路。

缺点:寻找最短路径时要遍历所有的路径,时间复杂度大;深度比较高时效率低

介绍下广度优先搜索bfs?

bfs:就是优先搜索离根结点更近的,一层一层搜,每次遍历到一个结点之后就记录下和这个结点最近的几个点,存入队列里面,然后从队列里取元素遍历,直到队列为空。适合解决最短路径问题(迪杰斯特拉)还有最小生成树问题(克鲁斯卡尔)。

bfs优点:便于寻找最短路径

缺点:内存耗费量大(需要开大量的数组单元用来存储状态)

请简述快速排序的思想?

首先,快速排序是基于分治思想的一种排序,是冒泡排序的改进。

过程:将第一个元素值作为基准值,将比它小的值依次移动到左边,比他更大的值移动到右边,划分成左右两个子序列;再按同样的方法,对子序列再进行移动、划分,直到每个子序列长度都为一,排序结束。

什么是哈夫曼树?

首先,介绍哈夫曼树之前要介绍带权路径长度是什么,带权路径长度是结点到根结点的距离乘以结点值。

哈夫曼树就是带权路径长度之和最小的二叉树,树中权值较大的节点离根较近(使得处理高权重的结点代价更小),可以应用于数据压缩当中,比如哈夫曼编码。

什么是红黑树?

是平衡二叉树的优化的一种优化,可以加快查找速度、比如jdk1.8版本之后的hashmap就是基于红黑树。

具体满足如下特点:

  1. 结点非黑即红
  2. 根结点是黑色的
  3. 没有连续的红色结点,如果当前是红色,则两个结点都是黑色
  4. 每个结点到其后代结点的路径中,黑色结点一样多

B树?

B是m叉平衡搜索数,是二叉平衡树的优化。

在这里插入图片描述

它要求:

  • 每个整棵树绝对平衡,不能有高度差
  • 每个结点最多有m棵子树,m-1个关键字
  • 除根节点外,其它结点至少有m/2棵子树,m/2-1个关键字

B和B+树比较?

B+树是B树的优化

在这里插入图片描述

具体区别如下

  • B+树的叶结点包含了所有关键字,分支结点只是起到一个索引的作用。而B树里面每个叶子结点和分支结点的作用一样。
  • B+树结点的子树个数和关键字个数相等,而B树的是子树和关键字相互交替子树更多一个
  • 查找效率上,B+树可以直接遍历叶子结点的链表来实现搜索,有利于范围查找。而且B+树分支结点不存放指针指针信息,同一区域可以存放更多的分支结点,I/O次数更少,查找效率更高。

图的存储结构?

邻接矩阵:用一个一维数组存储点信息,用一个二维数组存储边信息,这个二维矩阵就是领接矩阵。

特点:存储空间浪费,但查找速度快,很容易确定两个点之间是否有边,实现简单

领接表:由数组加链表的形式组成,数组用于存储结点信息,数组每个元素后跟着一个链表,存储这个结点的出度边。

特点:节省空间,但实现复杂,不利于确定两点之间是否有边,也不利于查找结点的入度

KMP思想

就对模式串进行分析,计算出对应的next数组,next数组存的是,模式串从第一个元素开始,分别到各个元素之间的子串,它们最长公共前后缀的长度。当某一次匹配失败时,就可以根据next数组的值,把模式串移动前后缀匹配的位置,从而跳过了一些不可能的情况,对比指针再主串上只会向后移动,所以时间复杂度可以达到O(m+n)

求最小生成树和最短路径的算法分别有哪些?

最小生成树:普利姆算法、克鲁斯卡尔算法

最短路径:迪杰斯特拉算法(单源)、弗洛伊德算法(多源)

然后再具体解释一下各算法 巴拉巴拉。。。

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值