数据结构

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

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

MAKISE004

SICP:复数的直角和极坐标的表示(Python实现)

数据抽象屏障是控制复杂性的强有力工具,然而这种类型的数据抽象还不够强大有力。从一个另一个角度看,对于一个数据对象可能存在多种有用的表示方式,且我们希望所设计的系统能够处理多种表示形式。比如,复数就可以表示为两种几乎等价的形式:直角坐标形式(实部和虚部)和极坐标形式(模和幅角)。有时采用直角坐标更方便... ... »

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

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

redis中hash数据结构及说明

目录 hash的数据结构 ziplist底层实现 字典 底层实现 扩容 缩容 总结 hash的数据结构 hash底层数据结构的实现包括两种:ziplist和字典当 保存的所有键值对字符串长度小于 64 字节并且键值对数量小于 512 时使用ziplist ,否则使用字典的方式 »

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

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

单链表的创建

单链表的创建 大家好,今天来详细说一下单链表的创建过程。 单链表是我们在学习数据结构时见到的第一种动态内存分配的结构,而这也是单链表和数组之间最大的区别,因为数组被分配的内存是固定的,而单链表的内存是在执行时分配的。 因此,想要给单链表分配内存,我们就得首先知道函数malloc(),即memory ... »

C语言数据结构中约瑟夫环问题探究

目录 问题描述 基本要求 测试数据 实现思路1 实现思路2 结果 数据结构开讲啦!!! 本专栏包括: 抽象数据类型 线性表及其应用 栈和队列及其应用 串及其应用 数组和广义表 树、图及其应用 存储管理、查找和排序 将从简单的抽象数据类型出发,深入浅出地讲解复数 到第二讲线性表及其应用 »

手撕AVL树(C++)

阅读本文前,请确保您已经了解了二叉搜索树的相关内容(如定义、增删查改的方法以及效率等)。否则,建议您先学习二叉搜索树。本文假定您对二叉搜索树有了足够的了解。 效率? 众所周知,在平衡条件下,对二叉搜索树中的元素进行增删查改,时间效率为$O(log(n))$。 然而,理想很丰满,现实很骨感,实际上,二 ... »

Go实现简单的数据库表转结构体详解

目录 前言 设计过程 迭代升级 前言 码上掘金上源码:code.juejin.cn/pen/7185836… 设计好了数据库表之后最烦的就是又要在代码中建一层实体层然后一个个创建对应表的结构体。关键那么多项目每次都是需要创建一份,所以就使用 go 实现一个简单的将数据库的表转化为结构体。 »

Springboot中PropertySource的结构与加载过程逐步分析讲解

记得之前写过一篇文章分析spring BeanFactory的时候说过的spring当中设计很经典的一个点就是 “读写分离” 模式。使用这个模式可以很好的区分开框架与业务的使用上的侧重点。业务层不应该具有修改框架的特性。 所以讲Propertysource我们从Environment开始讲。我们知 »

动态开点线段树说明

动态开点线段树说明 作者:Grey 原文地址: 博客园:动态开点线段树说明 CSDN:动态开点线段树说明 说明 针对普通线段树,参考使用线段树解决数组任意区间元素修改问题 在普通线段树中,线段树在预处理的时候,需要申请 4 倍大小的数组空间来存放划分的区域, 而本文介绍的动态开点线段树,它和普通线段 ... »

[数据结构]单向链表及其基本操作(C语言)

#单向链表 ##什么是单向链表 链表是一种物理储存单元上非连续、非顺序的储存结构。它由一系列结点(链表中每一个元素称为结点)组成,结点可动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 其实可以形象的认为,单向链表就好像一列火车。? 链表的节点就好像 ... »

MAKISE004

JavaScript数据结构yocto queue队列链表代码分析

目录 前言 准备工作 分析代码 队列 入队 出队 迭代器 总结 前言 Yocto-queue 是一种允许高效存储和检索数据的数据结构。它是一种队列类型,是一个元素集合,其中的项被添加到一端并从另一端移除。 它被设计用来操作数据量很大的数组,在你需要使用大量的 Array.pus »

数据结构高阶--八大排序汇总

排序总览 什么是排序? ?**排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 ✍️排序的稳定性:**假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j ... »

数组分成两个最接近集合问题

数组分成两个最接近集合问题 作者:Grey 原文地址: 博客园:数组分成两个最接近集合问题 CSDN:数组分成两个最接近集合问题 问题描述 给定一个正数数组 arr, 请把 arr 中所有的数分成两个集合,尽量让两个集合的累加和接近; 返回:最接近的情况下,较小集合的累加和。 主要思路 首先把数组之 ... »

图的拓扑排序

假设你有n个任务要做,其中某些任务需要在另外一些任务之前完成,你该如何规划你的任务,使得按照你的规划依次做下去就能完成你的所有任务? 定义 拓扑排序(Topological sorting, toposort):给定一个有向无环图,将所有节点排成一个线性序列,在这个序列中只有从前面的节点指向后面的节 ... »

一步步带你设计MySQL索引数据结构

前言 MySQL的索引是一个非常重要的知识点,也基本上是面试必考的一个技术点,所以非常重要。那你了解MySQL索引的数据结构是怎么样的吗?为什么要采用这样的数据结构? 现在化身为MySQL的架构师,一步步迭代设计出MySQL的索引结构,保证你再也忘记不了索引的结构了,轻松通过面试。 索引介绍 MyS ... »

朝花夕拾-链表(二)

"Good code is its own best documentation." - Steve McConnell “好代码本身就是最好的文档。” —— 史蒂夫·麦克康奈尔 0x00 大纲 0x01 前言 数据与结构的解耦 在上篇文章,我们通过将链表的节点放在具体数据类型的结构体内,这样,抽象 ... »

二叉树的最小深度问题

二叉树的最小深度问题 作者:Grey 原文地址: 博客园:二叉树的最小深度问题 CSDN:二叉树的最小深度问题 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 题目链接见:LeetCode 111. Mini ... »

朝花夕拾-链表(一)

"Writing in C or C++ is like running a chain saw with all the safety guards removed. " - Bob Gray “用C或C++写代码就像是在挥舞一把卸掉所有安全防护装置的链锯。” —— 鲍勃·格雷 0x00 大纲 0 ... »