zl程序教程

go-004-数据结构

  • Sentinel Go- 毫秒级统计数据结构揭秘

    Sentinel Go- 毫秒级统计数据结构揭秘

    介绍一个流量治理组件通常拥有“限流”这个最基础的能力,实现限流其核心思想是通过统计一段时间内的请求数,然后根据预先设定的阈值判断是否应该进行限流那么如何存储并统计这一段时间内的请求数则是核心关键,本文将重点介绍Sentienl-Go是如何实现的毫秒级指标存储以及数据统计固定窗口在正式介绍之前,先简单介绍一下固定窗口的算法(也叫计数器算法)是实现流量控制比较简单的一种方式。其他常见的还有很多例如滑动

    日期 2023-06-12 10:48:40     
  • Go 数据结构和算法篇(六):选择排序

    Go 数据结构和算法篇(六):选择排序

    今天继续介绍排序算法 —— 选择排序。 实现原理选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。这样一来,当遍历完未排序区间,就意味着已经完成整个序列的排序了。图示如下:选择排序图示同样,可以在 VisuAlgo 上看动态图:https://visualgo.net/zh/sorting。示例代码选择排序

    日期 2023-06-12 10:48:40     
  • Go 数据结构和算法篇(九):二分查找

    Go 数据结构和算法篇(九):二分查找

    介绍完基本的线性表排序算法后,今天我们来介绍一种常见的线性表查找算法 —— 二分查找。 一、二分查找的引入对于基于数字索引的数组/切片元素查找,我们可能第一反应都是遍历这个数组/切片,直到给定元素值和待查找的值相等时,返回索引值并退出,否则一直遍历到最后一个元素,如果还是没有找到则返回 -1。这样的查找虽然是简单粗暴了点,但是对于规模不大的数据集,也是没什么问题的,不过很明显,对于 n 个元素的数

    日期 2023-06-12 10:48:40     
  • Go 数据结构和算法篇(十六):二叉树的遍历

    Go 数据结构和算法篇(十六):二叉树的遍历

    二叉树的遍历指的是从根节点出发,按照某种次序依次访问二叉树中的所有节点,使得每个节点被访问一次且仅被访问一次。有多种方式可以遍历二叉树,如果按照从左到右的习惯方式,主要分为三种:前序遍历、中序遍历和后序遍历。下面我们简单介绍这几种遍历方式及对应实现算法,所谓的前序、中序和后序都是以根节点作为参照系。一、前序遍历从根节点开始,先遍历左子树,再遍历右子树(对于子树的子树,依此类推),如果二叉树为空,则

    日期 2023-06-12 10:48:40     
  • Go 数据结构和算法篇(十七):二叉排序树

    Go 数据结构和算法篇(十七):二叉排序树

    前面已经介绍了二叉树的存储和遍历,今天这篇教程我们以二叉排序树为例,来演示如何对二叉树的节点进行「增删改查」。开始之前,我们先来介绍什么是二叉排序树,以及为什么要引入这种二叉树。什么是二叉排序树我们前面已经介绍了很多数据结构,比如数组、链表、哈希表等,数组查找性能高,但是插入、删除性能差,链表插入、删除性能高,但查找性能差,哈希表的插入、删除、查找性能都很高,但前提是没有哈希冲突,此外,哈希表存储

    日期 2023-06-12 10:48:40     
  • Go 数据结构和算法篇(十八):平衡二叉树

    Go 数据结构和算法篇(十八):平衡二叉树

    引子上篇教程学院君给大家介绍了二叉排序树,并且提到理想情况下,二叉排序树的插入、删除、查找时间复杂度都是 O(logn),非常高效,而且它是一种动态的数据结构,插入删除性能和查找一样好,不像之前提到的二分查找,虽然查找性能也是 O(logn),但是需要先对线性表进行排序,而排序的最好时间复杂度也是 O(nlogn),所以二分查找不适合动态结构的排序。但是我们也提到如果二叉排序树构造的不好的话就会退

    日期 2023-06-12 10:48:40     
  • GO数据结构(一)——稀疏数组

    GO数据结构(一)——稀疏数组

    1. 稀疏数组 稀疏数组(sparsearray) 基本介绍: 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 本质上就是压缩数组。 稀疏数组的处理方法:  1. 记录数组一共有几行几列,有多少个不同的值。  2. 把具有不同值的元素的行列以及值,记录在一个小规模的数组中,从而缩小程序的规模。 1.1 实际问题(棋盘)如下面的二维数

    日期 2023-06-12 10:48:40     
  • Go语言网络爬虫中的基本数据结构

    Go语言网络爬虫中的基本数据结构

    为了承载和封装数据,需要先声明一些基本的数据结构。网络爬虫框架中的各个模块都会用到这些数据结构,所以可以说它们是这一程序的基础。 在分析网络爬虫框架的需求时,提到过这样几类数据 请求、响应、条目,下面我们逐个讲解它们的声明和设计理念。 请求用来承载向某一个网络地址发起的 HTTP 请求,它由调度器或分析器生成并传递给下载器,下载器会根据它从远程服务器下载相应的内容。因此,它有一个 net/ht

    日期 2023-06-12 10:48:40     
  • MongoDB: 探索其复杂的数据结构(mongodb的数据结构)

    MongoDB: 探索其复杂的数据结构(mongodb的数据结构)

    MongoDB,作为一种非关系型数据库(NoSQL),有自己独特的数据结构,支持灵活的数据模型。它可以构建网络,移动,物联网及亿级云应用程序等复杂场景,其将以丰富的非结构化数据进行模型设计和构建,使数据存储更加简单,工作更高效,无论是项目开发还是线上操作,都能提升效率。 MongoDB的特点是,数据模型是灵活的,可以灵活建模满足业务场景的多变性。 MongoDB数据是保存在文档的,每个文档都有

    日期 2023-06-12 10:48:40     
  • Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示

    Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示

    Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示     目录 一、数据结构算法 1、顺序表 2、链表 3、栈和队列 4、串的模式匹配 5、稀疏矩阵 6、广义表 7、二叉树 8、图 9、存储管理    10、静态查找 11、动态查找 12、内部排序 13、外部排序  

    日期 2023-06-12 10:48:40     
  • Algorithm:【Algorithm算法进阶之路】之数据结构基础知识

    Algorithm:【Algorithm算法进阶之路】之数据结构基础知识

    Algorithm:【Algorithm算法进阶之路】之数据结构基础知识 相关文章Algorithm:【Algorithm算法进阶之路】之数据结构二十多种算法演示Algorithm:【Algorithm算法进阶之路】之十大经典排序算法Algorithm:【Algorithm算法进阶之路】之数据结构基础知识Algorithm:【Algorithm算法进

    日期 2023-06-12 10:48:40     
  • 387集Go语言核心编程培训视频教材整理 | 数据结构(六)

    387集Go语言核心编程培训视频教材整理 | 数据结构(六)

    学习视频来源:《韩顺平Go语言核心编程387集完整版》         

    日期 2023-06-12 10:48:40     
  • 387集Go语言核心编程培训视频教材整理 | 数据结构(二)

    387集Go语言核心编程培训视频教材整理 | 数据结构(二)

    学习视频来源:《韩顺平Go语言核心编程387集完整版》                     

    日期 2023-06-12 10:48:40     
  • go语言中container容器数据结构heap、list、ring

    go语言中container容器数据结构heap、list、ring

    heap堆的使用: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

    日期 2023-06-12 10:48:40     
  • go map数据结构和源码详解

    go map数据结构和源码详解

    目录 1. 前言 2. go map的数据结构 2.1 核心结体体 2.2 数据结构图 3. go map的常用操作 3.1 创建 3.2 插入或更新 3.3 删除 3.4 查找 3.5 range迭代 3.5.1 初始化迭代器mapiterinit() 3.5.2 迭代过程mapiternext() 4. go map的扩容缩容 4.1 扩容缩容的基本原理 4.2 为

    日期 2023-06-12 10:48:40     
  • go语言|数据结构:单链表(1)

    go语言|数据结构:单链表(1)

    目录 链表  单链表结构 创建节点 遍历链表 头插法 尾插法 遍历方法 链表长度 链表转数组 数组转链表 链表   一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运

    日期 2023-06-12 10:48:40     
  • go语言|数据结构:单链表(2)

    go语言|数据结构:单链表(2)

    目录 单向链表 首元结点 头结点 头指针 链表与节点 插入单个元素 数组插入链表 链表长度 链表副本 链表拼接 Cat()追加 Add()左加 节点删除 删除首元结点 删除尾结点 习题解答 单向链表   又称单链表,单链表中每个结点包含两部分,分别是数据域和指针域,上一个结点

    日期 2023-06-12 10:48:40     
  • go语言|数据结构:二叉树(3)拷贝、镜像和对称

    go语言|数据结构:二叉树(3)拷贝、镜像和对称

    拷贝副本 复制一个二叉树副本,广度优先遍历同时设置两个队列,一个遍历一个复制创建。 func Copy(bt *biTree) *biTree { root := bt.Root if root == nil { return &biTree{} } node := &

    日期 2023-06-12 10:48:40     
  • go语言|数据结构:单链表(3)刷题实战

    go语言|数据结构:单链表(3)刷题实战

    目录 单链表——刷题实战 任意类型的数据域 实例01 快慢指针 实例02 反转链表 实例03 实例04 交换节点 实例05 单链表——刷题实战 任意类型的数据域 之前的链表定义数据域都是整型int,如果需要不同类型的数据就要用到 interface{}。 空接口 interface{}   对于描述起

    日期 2023-06-12 10:48:40