数据结构与算法

数据结构-详解优先队列的二叉堆(最大堆)原理、实现和应用-C和Python

一、堆的基础 1.1 优先队列和堆 优先队列(Priority Queue):特殊的“队列”,取出元素顺序是按元素优先权(关键字)大小,而非元素进入队列的先后顺序。 若采用数组或链表直接实现优先队列,代价高。依靠数组,基于完全二叉树结构实现优先队列,即堆效率更高。一般来说堆代指二叉堆。 优先队列的完 ... »

[数据结构]KMP算法(含next数组详解)

#字符串匹配问题 给定一个字符串 s 和一个要匹配的模式串 p。模式串 p 有可能在 s 中多次出现,请求出模式串 p 在 s 中所有出现的起始位置。 #暴力匹配算法 BF ##算法思路 在面对字符串匹配问题时,很容易想到暴力求解。字符串匹配的暴力算法思路很简单,即在 s 中枚举起点 i,对于每个起 ... »

MAKISE004

Java数据结构之选择排序算法的实现与优化

目录 初识选择排序 算法实现 优化后的算法实现 选择排序 VS 冒泡排序 初识选择排序 算法思想[以升序为例]: 第一趟选择排序时,从第一个记录开始,通过n-1次关键字的比较,从第n个记录中选出关键字最小的记录,并和第一个记录进行交换 第二趟选择排序时,从第二个记录开始,通过n-2次关 »

数据结构与算法 -> 大顶堆与小顶堆

一、大顶堆 大顶堆是一种数据结构,它是一颗完全二叉树,并且满足以下性质: 每个节点的值都大于或等于它的子节点的值 因此,大顶堆的根节点(也称为堆顶)总是最大的元素 二、小顶堆 小顶堆也是一种数据结构,它是一颗完全二叉树,并且满足以下性质: 每个节点的值都小于或等于它的子节点的值 因此,小顶堆的根节点 ... »

Python 实现栈与队列

栈 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一 ... »

图解B树及C#实现(2)数据的读取及遍历

前言 本文为系列文章 B树的定义及数据的插入 数据的读取及遍历(本文) 数据的删除 前一篇文章为大家介绍了 B树 的基本概念及其插入算法。本文将基于前一篇的内容,为大家介绍插入到 B树 中的数据该怎么读取及遍历, 本文的代码基于前一篇文章的代码,已经实现的功能可能会被省略,只介绍新增的功能。 在本文 ... »

Java数据结构之AC自动机算法的实现

目录 1 概念和原理 2 节点定义 3 构建Trie前缀树 4 构建fail失配指针 5 匹配文本 6 案例演示 7 总结 1 概念和原理 一般的字符串匹配算法都是匹配一个子串,例如KMP、Trie,那么如果同时匹配多个子串呢?此时就需要用到AC自动机了。 AC自动机算法是一个多模式字符 »

Java数据结构之KMP算法详解以及代码实现

目录 暴力匹配算法(Brute-Force,BF) 概念和原理 next数组 KMP匹配 KMP全匹配 总结 我们此前学了前缀树Trie的实现原理以及Java代码的实现。Trie树很好,但是它只能基于前缀匹配实现功能。但是如果我们的需求是:一个已知字符串中查找子串,并且子串并不一定符合前缀匹配 »

python算法与数据结构朋友圈与水杯实验题分析实例

目录 算法与数据结构实验题-朋友圈 实验任务 数据输入 数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题-水杯 实验任务 数据输入 数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题-朋友圈 实验任务 朋友圈是由若干个人组成的集体,已 »

C++数据结构之哈希算法详解

目录 1.哈希映射 1.1哈希的概念 1.2哈希冲突 1.3哈希函数 2.解决哈希冲突 2.1闭散列法 3代码实现 3.1状态 3.2创建哈希节点类 3.3数据插入 3.4查找与删除 3.5仿函数  4.开散列哈希桶 4.1概念 4.2仿函数  4.3哈希桶结点构建  4.4哈希桶的查找 »

MongoDB - 索引知识

学会 MongoDB 的增删改查只能算得上是“初窥门径”,了解、熟练掌握索引才能算得上“融会贯通”。基本可以认为数据库的索引知识是一个初级开发向中级开发转变所必备的知识。 ... »

JS数据结构与算法中的队列结构详解

目录 队列结构 一.认识队列 二.队列的应用 三.队列类的创建 四.队列的常见操作 五.击鼓传花 六.优先级队列 七.优先级队列的实现 队列结构 一.认识队列 受限的线性结构: 我们已经学习了一种受限的线性结构:栈结构. 并且已经知道这种受限的数据结构对于解决某些特定问题,会有特 »

JS数据结构与算法-队列结构

队列结构 一.认识队列 受限的线性结构: 我们已经学习了一种受限的线性结构:栈结构. 并且已经知道这种受限的数据结构对于解决某些特定问题,会有特别的 效果. 下面,我们再来学习另外一个受限的数据结构:队列. 队列(Queue),它是一种受限的线性表,先进先出(FIFO First ln First ... »

Java数据结构之图的路径查找算法详解

目录 前言 算法详解 实现 API设计 代码实现 前言 在实际生活中,地图是我们经常使用的一种工具,通常我们会用它进行导航,输入一个出发城市,输入一个目的地 城市,就可以把路线规划好,而在规划好的这个路线上,会路过很多中间的城市。这类问题翻译成专业问题就是: 从s顶点到v顶点是否存 »

Android开发数据结构算法ArrayList源码详解

目录 简介 ArrayList源码讲解 初始化 扩容 增加元素 一个元素 一堆元素 删除元素 一个元素 一堆元素 修改元素 查询元素 总结 ArrayList优点 ArrayList的缺点 简介 ArrayList是List接口的一个实现类,它是一个集合容器,我们通常会通过 »

数据结构与算法系列二之链表、哈希表及栈

第四章 链表 21、删除倒数第k个节点 题目:如果给定一个链表,请问如何删除链表中的倒数第k个节点?假设链表中节点的总数为n,那么1≤k≤n。要求只能遍历链表一次。例如,输入下图1中的链表,删除倒数第2个节点之后的链表如下图2所示。 public class test0101 { public st ... »

wydilearn

C语言数据结构与算法之队列的实现详解

目录 队列的概念及结构 队列的实现 Queue.h Queue.c Test.c 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)的原则 入队列:进行插入操作的一端称为队尾 »

数据结构:二叉树

定义 特点 每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。 左子树和右子树是有区别的,次序不能颠倒。 即使某个节点只有1个子节点,也是有左右之分的。 特殊的二叉树: 斜树:正如上图的树1和树2,向一边斜的二叉树。 满二叉树:叶子节点都在最后一层,也就是说,非叶子节点都有左右子树 ​ 完全 ... »