数据结构[15]
【面试题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 编程手
树
树就是一种类似现实生活中的树的数据结构(倒置的树)。任何一颗非空树只有一个根节点。 一棵树具有以下特点: 一棵树中的任意两个结点有且仅有唯一的一条路径连通。 一棵树如果有 n 个结点,那么它一定恰好有 n-1 条边。 一棵树不包含回路。 下图就是一颗树,并且是一颗二叉树。 如上图所示,通过上面这张图
线性数据结构:数组、链表、栈、队列
1. 数组 数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组的特点是:提供随机访问 并且容量有限。 假如数组的长度为 n。
访问:O(1)//访问特定