【十三】质数


质数大于1的自然数,只能被1和它本身整除的数就是质数。任何一个合数都能表现成多个质数的乘积。判断质数很明显判断一个数是不是质数,我们只需要判断它只有1和它本身这两约数。试除法朴素做法判断一个数x是否是质数,就枚举小于x的数去试除法。for (int i = 2; i < x; ++ i) {

【九】散列值


hash的定义Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入

【八】二叉堆


二叉堆的定义二叉堆(英语:binary heap)是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。当父节点的键值总是大于或等于任何一个子节点的键值时为“最大堆(大根堆)”。当父

【七】并查集


并查集的定义在计算机科学中,并查集(英文:Disjoint-set data structure,直译为不交集数据结构)是一种数据结构,用于处理一些不交集(Disjoint sets,一系列没有重复元素的集合)的合并及查询问题。 并查集支持如下操作: 查询:查询某个元素属于哪个集合,通常是返回集合内

【六】字典树


字典树的定义在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。 与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。 一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。像上图这个数,可以知道字典树的

【五】kmp字符串匹配


kmp 字符串匹配算法就是为了使得,通过 **部分匹配表**(next数组) 使得 i 不会向后回退。

【四】数组模拟队列、循环队列


队列的定义队列,又称为伫列(queue),计算机科学中的一种抽象资料型别,是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作。数据队列通过数组实现队列可以,提

【三】数组模拟栈


栈的定义栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。 它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。简单的来讲,栈是一种具

【二】静态双链表


双链表的定义双向链表,又称为双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。 所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 一般我们都构造双向循环链表。简单的来说,双链表中除首尾结点外,都知道其前一个结点(前驱),和后一个结点(后

【一】静态单链表


单链表定义单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。大概来讲,就是由一个个结点(里面包含数据,和