
Go版数据结构
文章平均质量分 83
本专栏会对常用的、基础的数据结构进行概念性的讲解,同时会使用Go语言实现对应的数据结构算法。
通过本专栏的学习,您可以掌握基本的算法概念知识,可以知道如何使用Go语言来实现这些结构,同时可以帮助您在实际开发中扩展编程思维。
Swxctx
喜欢技术、喜欢开源项目及分享。
铭心刻骨,就要一意孤行;越是憧憬,越要风雨兼程;要走多远,才算走进森林_xc。
展开
-
Go版数据结构 -【序言】
本书与《Go,你也可以的!》、《Go进阶概览》为同一个系列。在前两本书中,分别讲解了Go语言的基础知识、进阶内容。笔者查看了市面上Go语言方面的数据结构书籍或文章,发现这一块的内容比较少,也没有找到简单成体系的指南。基于这种情况,笔者决定编写本书,本书将致力于帮助读者掌握基本的数据结构及算法知识。本书会对常用的、基础的数据结构进行概念性的讲解,同时会使用Go语言实现对应的数据结构算法。通过本书的学习,您可以掌握基本的算法概念知识,可以知道如何使用Go。原创 2024-09-24 10:30:59 · 382 阅读 · 0 评论 -
Go版数据结构 -【1.1 数据结构的分类与基本概念】
按照标准说法,数据结构指的是在计算机中存储和组织数据的一种方式,以便能够有效地访问和修改数据。将这些书籍分类,之后放入不同的书架这个分类的放入书架的方法,就叫做数据结构,我们的结构是:书架的每一层放不同分类的书籍。同样的,我们在编程时也会遇到类似这样的情况,需要采用一种特定的结构方式来管理数据,比如说使用数组结构存储数据,这就是数据结构。原创 2024-09-24 10:35:15 · 394 阅读 · 0 评论 -
Go版数据结构 -【1.2 数据结构的时间与空间复杂度】
在算法和数据结构的分析中,时间复杂度和空间复杂度是两个非常重要的指标,它们分别衡量了算法运行时间和所需存储空间的增长速度。理解这些概念有助于我们评估和比较不同数据结构在不同场景下的性能表现。本节我们将对这两者的基本概念进行讲解,同时针对他们的计算方法进行解释与分析。原创 2024-09-24 10:39:15 · 1173 阅读 · 0 评论 -
Go版数据结构 -【2.1 数组】
数组是我们常用的一种数据结构,在大部分编程语言中都原生支持,数组在我们的日常开发工作中也是一种必不可少的数据结构。原创 2024-09-24 10:44:41 · 906 阅读 · 0 评论 -
Go版数据结构 -【2.2 链表】
链表是一种常见的线性数据结构,与数组不同的是,链表中的元素并不存储在连续的内存空间中,而是通过指针连接在一起。链表非常适合需要频繁插入、删除操作的场景,因为它不需要像数组那样频繁移动数据。原创 2024-09-25 10:35:33 · 1309 阅读 · 0 评论 -
Go版数据结构 -【3.1 栈】
栈是一种线性数据结构,本节我们将针对栈的基础概念、实现原理以及Go语言的栈实现进行讲解。原创 2024-09-25 10:51:04 · 624 阅读 · 0 评论 -
Go版数据结构 -【3.2 队列】
队列与栈有相同的地方,但是也略有不同。本节我们将讲解队列的基本概念及Go语言实现。原创 2024-09-26 17:32:36 · 774 阅读 · 0 评论 -
Go版数据结构 -【4.1 二叉树】
二叉树在实际应用中是离不开的,在很多底层实现上都会使用到二叉树,通过二叉树而扩展出来的结构也比较多。本节我们将介绍二叉树的基本概念以及Go语言的基本实现,后续章节我们将继续讲解衍生出的二叉搜索树、平衡树。原创 2024-09-26 17:36:49 · 1157 阅读 · 0 评论 -
Go版数据结构 -【4.2 二叉搜索树】
二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树结构,它在上一节的基础上做了新的规则限制。它的特性使得在进行查找、插入、删除等操作时效率非常高。二叉搜索树广泛应用于搜索、排序和数据存储等场景。本节我们将介绍二叉搜索树的基本概念、其特有的规则以及在 Go 语言中的实现。原创 2024-09-27 10:48:01 · 1460 阅读 · 0 评论 -
Go版数据结构 -【4.3 AVL树】
AVL 树 是 二叉搜索树 的一个自平衡扩展,它通过旋转操作来保持树的平衡。与普通的二叉搜索树不同,AVL 树在每次插入或删除节点时,都会检查树的平衡因子,并进行必要的调整以确保树的高度尽可能保持平衡。本节我们将介绍AVL 树的基本概念、平衡因子、旋转操作,以及AVL 树的Go语言实现。原创 2024-09-27 10:49:51 · 918 阅读 · 0 评论 -
Go版数据结构 -【4.4 红黑树】
红黑树是一种自平衡的二叉搜索树,它通过特定的颜色属性和旋转操作来确保树的平衡性,从而保证查找、插入和删除操作的效率达到 O(log n)。红黑树与AVL 树一样,都是为了保持二叉搜索树的平衡,但红黑树允许一定程度的不平衡,通过特定的颜色规则来维持整体的近似平衡,而不是像AVL 树那样严格要求左右子树的高度差不超过1。原创 2024-10-10 16:45:40 · 811 阅读 · 0 评论 -
Go版数据结构 -【5.1 堆】
堆是一种常见的数据结构,广泛应用于优先队列、排序算法(如堆排序)、内存管理等场景。堆可以分为 最大堆 和 最小堆,堆的核心特性是 堆序性质。即在最大堆中,任意节点的值都不小于其子节点的值,而在最小堆中,任意节点的值都不大于其子节点的值。原创 2024-10-10 16:47:38 · 733 阅读 · 0 评论 -
Go版数据结构 -【5.2 优先队列】
优先队列 是一种特殊的队列,它与普通队列的区别在于:每个元素都有一个优先级,出队时,总是优先出队优先级最高的元素,而不是按照入队的顺序。优先队列广泛应用于各种场景,如任务调度、路径规划等。它通常使用堆来实现,因为堆能保证高效的优先级出队和插入操作。原创 2024-10-10 16:49:19 · 678 阅读 · 0 评论 -
Go版数据结构 -【6.1 图的基本概念与表示】
图相较于二叉树又是另一种结构,从名称就可以看出,图是另一种复杂的数据结构。图在我们的实际应用中还是比较广泛的,本节我们将针对图的基本概念、Go语言的实现进行讲解。原创 2024-10-10 16:51:04 · 1076 阅读 · 0 评论 -
Go版数据结构 -【6.2 深度优先搜索与广度优先搜索】
图是一个重要的数据结构,而遍历图的方式主要有两种:深度优先搜索 和 广度优先搜索。这两种算法分别适合不同的场景。本节我们将介绍 深度优先 和 广度优先 搜索的基本概念、算法原理,并使用 Go 语言实现它们。原创 2024-10-10 16:52:07 · 1045 阅读 · 0 评论 -
Go版数据结构 -【6.3 最短路径算法】
在图结构中,最短路径算法 是一类非常重要的算法,它用于找到从一个顶点到另一个顶点的最短路径。最短路径问题广泛应用于导航、通信网络、路径规划等领域。最短路径问题 是在图中找到从起点到目标顶点的最短路径,路径长度是由边的权重决定的。对于不同类型的图,最短路径问题可以有多种解法。原创 2024-10-10 16:53:32 · 633 阅读 · 0 评论 -
Go版数据结构 -【7.1 哈希函数与哈希表】
哈希函数和哈希表是数据结构中的重要概念,广泛应用于查找、存储和管理数据,尤其是在实现高效的数据访问时。本节我们将介绍哈希函数和哈希表的基本概念、应用场景,并展示如何在Go语言中实现一个简单的哈希表。原创 2024-10-10 16:54:45 · 684 阅读 · 0 评论 -
Go版数据结构 -【7.2 冲突处理方法:链地址法与开放寻址法】
哈希表是一种高效的数据结构,用于快速查找、插入和删除数据。然而,哈希表的一个重要问题是哈希冲突,即多个键映射到同一个索引位置。当出现冲突时,我们需要采取适当的方法来处理冲突。本节将介绍两种常见的哈希冲突处理方法:链地址法和开放寻址法,并展示如何在Go语言中实现这两种方法。原创 2024-10-10 16:55:43 · 1286 阅读 · 0 评论 -
Go版数据结构 -【8.1 冒泡排序】
冒泡排序是一种简单且直观的排序算法。它的基本思想是通过多次遍历待排序的序列。每次比较相邻的两个元素,如果它们的顺序不正确(例如,第一个比第二个大),就交换它们的位置。经过多次这样的操作,较大的元素会逐渐冒泡到序列的末端。原创 2024-10-10 16:57:23 · 510 阅读 · 0 评论 -
Go版数据结构 -【8.2 选择排序】
选择排序是一种简单直观的排序算法。其基本思想是在未排序序列中找到最小(或最大)的元素,并将其与未排序序列的第一个元素交换,随后再继续从剩下的未排序序列中找最小(或最大)的元素,重复此操作直到序列有序。原创 2024-10-10 16:59:04 · 381 阅读 · 0 评论 -
Go版数据结构 -【8.3 插入排序】
插入排序是一种简单且直观的排序算法,它的基本思想是将数组分为已排序和未排序两个部分。通过逐步将未排序部分的元素插入到已排序部分的正确位置,逐步构建整个有序序列。看起来与选择排序是差不多的,但是还是有一些差别的。选择排序是一直从未排序序列中选择最小/最大的元素插入到已排序队列中。而插入排序则是:每次从未排序的序列中拿到第一个元素,与已排序序列的元素比较,之后找到它自己合适的位置插入进去。原创 2024-10-10 17:00:10 · 420 阅读 · 0 评论 -
Go版数据结构 -【8.4 快速排序】
快速排序是一种分而治之的排序算法。它通过随机选择一个基准元素,将数组分为两部分。一部分比基准元素小,另一部分比基准元素大,之后对两部分排序。快速排序以其平均情况下的 O(n log n) 时间复杂度和良好的性能而广泛应用。原创 2024-10-10 17:01:18 · 433 阅读 · 0 评论 -
Go版数据结构 -【8.5 归并排序】
归并排序也是一种分而治之的排序算法。它将数组分成两个子数组,分别对其进行排序,然后将两个已排序的子数组合并为一个有序的数组。初步听起来好像与快速排序是一样的,但是其实还是有一些区别的。快速排序随机选择一个元素作为基准,将数组分为两部分;归并排序是从中间平分。快速排序不需要进行合并操作,快速排序在划分时已经完成了左右的排序,分割之后不再需要额外的合并操作;归并排序需要需要额外的合并步骤。原创 2024-10-10 17:02:19 · 469 阅读 · 0 评论 -
Go版数据结构 -【8.6 线性查找】
线性查找是最基础的一种查找算法。其思想非常简单,就是从头到尾依次遍历整个数组或列表,逐个元素进行比较,直到找到目标元素为止。由于其实现和理解非常直观,线性查找通常是学习查找算法的第一步。原创 2024-10-10 17:03:16 · 455 阅读 · 0 评论 -
Go版数据结构 -【8.7 二分查找】
二分查找是一种高效的查找算法,它通过将有序数组逐步对半分割的方式快速定位目标元素。二分查找的效率远高于线性查找,适用于大规模数据集,但前提是数组必须是有序的。简单来说就是将数组分成两半,之后将中间元素与查找目标值进行比较,这样就可以决定下一步从前半部分还是后半部分查找。通过二分就可以将线性的查找步骤减少了一半,同时如果对二分后再二分,那么效率就会更进一步提高。原创 2024-10-10 17:04:28 · 498 阅读 · 0 评论