数据结构[15]

【面试题88】一网打尽面试中常被问及的8种数据结构

快速介绍8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外,数据结构属于计算机科学和软件工程的基础。当涉及软件工程面试问题时,这是一个关键

【面试题40】六大类二叉树面试题汇总解答

0 概述 继上一篇总结了二叉树的基础操作后,这一篇文章汇总下常见的二叉树相关面试题,主要分为判断类、构建类、存储类、查找类、距离类、混合类这六类大问题。 本文所有代码

【面试题39】盘点那些必问的数据结构算法题之快速排序

0 概述 快速排序也是基于分治模式,类似归并排序那样,不同的是快速排序划分最后不需要merge。对一个数组 A[p..r] 进行快速排序分为三个步骤: 划分:数组 A[p…r] 被划分为两个子数组 A[p…q-1] 和 A[q+1…r],使得 A[p…q-1] 中每个元素都小于等于 A[q],而 A

【面试题38】盘点那些必问的数据结构算法题之基础排序

0 概述 排序算法也是面试中常常提及的内容,问的最多的应该是快速排序、堆排序。这些排序算法很基础,但是如果平时不怎么写代码的话,面试的时候总会出现各种bug。 虽然思想都知道,但是就是写不出来。本文打算对各种排序算法进行一个汇总,包括插入排序、冒泡排序、选择排序、计数排序、归并排序,基数排序、桶排序

【面试题37】盘点那些必问的数据结构算法题之二分查找算法

0 概述 二分查找本身是个简单的算法,但是正是因为其简单,更容易写错。甚至于在二分查找算法刚出现的时候,也是存在bug的(溢出的bug),这个bug直到几十年后才修复(见《编程珠玑》)。 本文打算对二分查找算法进行总结,并对由二分查找引申出来的问题进行分析和汇总。若有错误,请指正。 1 二分查找基础

【面试题36】盘点那些必问的数据结构算法题之二叉树基础

0 概述 在说二叉树前,先来看看什么是树。树中基本单位是结点,结点之间的链接,称为分支。一棵树最上面的结点称之为根节点,而下面的结点为子结点。一个结点可以有0个或多个子结点,没有子结点的结点我们称之为叶结点。 二叉树是指子结点数目不超过2个的树,它是一种很经典的数据结构。而二叉搜索树(BST)是有序

【面试题35】盘点那些必问的数据结构算法题之二叉堆

0 概述 本文要描述的堆是二叉堆。二叉堆是一种数组对象,可以被视为一棵完全二叉树,树中每个结点和数组中存放该结点值的那个元素对应。树的每一层都是填满的,最后一层除外。二叉堆可以用于实现堆排序,优先级队列等。本文代码地址在 这里。 https://github.com/shishujuan/dsalg

【面试题34】盘点那些必问的数据结构算法题之链表

0 概述 链表作为一种基础的数据结构,在很多地方会用到。如在Linux内核代码,redis源码,python源码中都有使用。除了单向链表,还有双向链表,本文主要关注单向链表(含部分循环链表题目,会在题目中注明,其他情况都是讨论简单的单向链表)。双向链表在redis中有很好的实现,也在我的仓库中拷贝了

二叉树面试题

001 树的相关术语。 树:树是由根节点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的节点,所定义的关系称为父子关系。 二叉树:树是由根节点和若干子树构成的。每个节点最多含有两个子树的树称为二叉树。 度:一个结点含有的子树的个数 叶子节点或终端节点:度为0

线性表面试题

001 什么是链表? 链表是一种动态的数据结构,因为在创建链表时,我们不需要知道链表的长度,当插入一个结点时,只需要为该结点分配内存,然后调整指针的指向来确保新结点被连接到链表中。所以,它不像数组,内存是一次性分配完毕的,而是每添加一个结点分配一次内存。正是因为这点,所以它没有闲置的内存,比起数组,

排序面试题

001 什么是冒泡排序? 冒泡排序是在遍历数组的过程中,每次都要比较连续相邻的元素,如果某一对相邻元素是降序(即前面的数大于后面的数),则互换它们的值,否则,保持不变。由于较大的值像“气泡”一样逐渐浮出顶部,而较小的值沉向底部,所以叫冒泡排序。 002 冒泡排序的代码实现? 具体实现参考如下源代码

布隆过滤器

布隆过滤器相信大家没用过的话,也已经听过了。 布隆过滤器主要是为了解决海量数据的存在性问题。对于海量数据中判定某个数据是否存在且容忍轻微误差这一场景(比如缓存穿透、海量数据去重)来说,非常适合。 文章内容概览: 什么是布隆过滤器? 布隆过滤器的原理介绍。 布隆过滤器使用场景。 通过 Java 编程手