点击蓝字 关注我们★哈希表(散列表)今天小企鹅和大家分享和学习我们数据结构与算法中哈希表的一些知识。首先先问两个问题什么是哈希表?我为什么要去用他呢?哈希表又称散列表。哈希表存储的基本思想是:以数据表中的每个记录的关键字 k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。 …
在进行各种图处理、图计算、图查询的时候,内存或是硬盘中如何存储图结构是一个影响性能的关键因素。本文主要分析了几种常见的内存图结构,及其时间、空间复杂度,希望对你有所启发。通常来说,对于图结构的几种常见的基础操作:插入一个点插入一个边删除一个边删除一个点的全部邻边找到一个点的全部邻边找到一个点的另一个邻点全图扫描获取一个点的入度或者出度这些图相关的操作,除了要 …
刷leetcode,没有线索无脑刷,行不行?不行,因为这效率太低下了!题主以前刷leetcode,虽然刷了100多道,但是,过不了一两个月,你就会发现这些题都从你的脑海里消失了,当你需要回忆起相关的问题和章节时,可能很难迅速而高效的找出来。leetcode官网本身虽然出了一些基于内容的合集,但合集也只是问题的集合,题目和题目之间缺乏链接、递进和讲解,解答的难 …
首先问一下有关redis可能知其然不知其所以然的问题1、为什么redis默认是16个数据库?2、为什么redis有这么多数据结构,它的数据结构都存储在哪儿呢?3、为什么redis还可以存储二进制字符串?接下来我们带着疑问,去github上面把源码拉下来,看看其中到底有何神秘之处,是否真如我们所想,一看便知。1、数据结构分析源码拉取我们直接拉去最新的代码一看便 …
话说 C++ 里的 List,本质上就是一个带头节点的双向循环链表,听着是不是有点绕?很多朋友刚开始学List的时候,搞不懂它和vector的区别...大家请看这张图图:带头节点的双向循环链表,头节点像个小队长,两边都指向自己想象一下:List就像幼儿园里手拉手的小朋友们,每个小朋友(节点)都牵着前一个和后一个的手,这样就形成了一条长长的队伍。想加个新朋友? …
本文将深入探讨C语言中的基本数据结构,包括链表、栈、队列和树。我们将详细介绍它们的定义、实现和常见的应用场景。通过学习这些数据结构的实现方法和使用技巧,你将能够更好地编写高效、可靠的C语言程序。一、链表链表是一种常见的动态数据结构,它由一系列的节点构成,每个节点包含数据和指向下一个节点的指针。链表有许多形式,如单链表、双链表和循环链表等。我们将详细介绍单链表 …
队列、双端队列、双栈队列与滑动窗口最大值一、队列到底解决什么问题?o **队列(Queue)是一种先进先出(FIFO)**的线性结构:o 入队(enqueue):从尾部插入o 出队(dequeue):从头部删除o 典型应用:o 任务调度(按到达时间顺序处理)、宽度优先搜索(BFS)、缓存异步消息、流式窗口统计(配合单调队列)、生产者-消费者模型等。二、三种基 …
概述Channel 类似于 Java 的 BlockingQueue 阻塞队列,不同之处在于 Channel 提供了挂起的 send() 和 receive() 方法。另外,通道 Channel 可以被关闭表明不再有数据会进入 Channel, 而接收端可以通过 for 循环取出数据。Channel 也是生产-消费者模式,这个设计模式在协程中很常见。基本使用 …
对于一个单向链表来说,上一条数据只能指向下一条数据(如下图),那我们想反转这个链表,变成下图这个样子,怎么实现呢?1->2->3->4->55->4->3->2->1首先第一种方式,直接反转顺序,将2->1 ,3->2 以此类推,则完成了链表的反转,具体实现为,定义三个指针,pre,cur,next …
你有没有过这种崩溃:对着链表反转代码看半天,指针绕来绕去,越看越像“打结的耳机线”?其实链表反转没那么玄乎,核心就是“让每个节点掉个头拉手”,像小朋友排队转身一样简单!今天用“幼儿园排队”的段子给你讲透Java实现,3个指针+5步操作,看完就能写代码,再也不用被指针绕晕~先懂链表:像小朋友手拉手排队,断一个就“队伍散架”要反转链表,得先搞懂链表的“脾气”:它 …
