Go语言数据结构与算法
介绍数据结构与算法,涵盖字符串、数组、链表、队列、栈、树、图等一系列的数据结构,同时实用go语言来实现这些算法。
Clown95
a low coder
展开
-
Go数据结构与算法-Hash表
title: Go数据结构与算法-Hash表tags: go,算法介绍哈希表是一种以 键-值(key-value) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。就像我们查字典一样,比如说我们查找字典中的某一个字,通过目录索引到这个字,然后根据目录记录的页码查找到该字的具体信息。目录中的索引就是key,查找到字的信息就是vale。基本思想哈希的思路很简单,如果...原创 2018-12-24 01:37:31 · 866 阅读 · 6 评论 -
Go数据结构与算法-实现链式栈
title: Go数据结构与算法-实现链式栈tags: go,算法介绍前面我们看了栈的数组实现,本文来看看用链表实现栈的方法。演示package mainimport ( "errors" "fmt")type Node struct{ data interface{} next * Node}type LinkStack interface { I...原创 2018-12-18 09:43:29 · 281 阅读 · 0 评论 -
Go数据结构与算法-桶排序
title: Go数据结构与算法-桶排序tags: go,算法介绍桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。基本思想桶排序的基本思路是将数据根据计算规则来分组...原创 2018-12-19 20:56:17 · 1268 阅读 · 0 评论 -
Go数据结构与算法-基数排序
title: Go数据结构与算法-基数排序tags: go,算法介绍基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基本思想基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较...原创 2018-12-19 20:33:34 · 464 阅读 · 0 评论 -
Go数据结构与算法-计数排序
title: Go数据结构与算法-计数排序tags: go,算法介绍计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。基本思想计数排序和基数排序都是非比较类排序,过程比较简单,但是计数是比较巧妙的,借助第三个数组 countsArr 存元素出现的频率往后累加,对应减一即可得出该元素在排序数组...原创 2018-12-19 20:40:32 · 463 阅读 · 0 评论 -
Go数据结构与算法-堆排序
title: Go数据结构与算法-堆排序tags: go,算法介绍堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法(一般升序采用大顶堆,降序采用小顶堆):大顶堆:每个节点的值都大于或等于其子节点的值,...原创 2018-12-19 20:18:18 · 459 阅读 · 0 评论 -
Go数据结构与算法-归并排序
title: Go数据结构与算法-归并排序tags: go,算法介绍归并排序是建立在归并操作上的一种有效的排序算法。归并排序与快速排序类似,也采用了“分治法”的思想。快速排序:选取基准后,将集合分割为左右子集合再进行递归分组,最后合并排序好的各子集合.归并排序:将集合均分为左右子集合,各自在内部进行递归排序,最后合并排序好的各子集合基本思想首先考虑下如何将2个有序数列...原创 2018-12-19 20:09:52 · 259 阅读 · 0 评论 -
Go数据结构与算法-快速排序
title: Go数据结构与算法-快速排序tags: go,算法介绍快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。快速排序是冒泡排序的优化版,同属于交换类排序。它使用了 “分治法” 的思想,将集合分割为相似子集,再对子集进行递归排序,最后将子集的排序结果组合即可。基本思想使用分治法先从数列中取出一个数作为key值;将比这...原创 2018-12-19 19:53:27 · 284 阅读 · 0 评论 -
Go数据结构与算法-希尔排序
title: Go数据结构与算法-希尔排序tags: go,算法介绍希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;基本思想先将整个待排序...原创 2018-12-18 10:49:43 · 262 阅读 · 0 评论 -
Go数据结构与算法-插入排序
title: Go数据结构与算法-插入排序tags: go,算法介绍插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。基本思想在要排序的一组数中,假定前n-1个数已经排好序,现...原创 2018-12-18 10:38:13 · 251 阅读 · 0 评论 -
Go数据结构与算法-选择排序
title: Go数据结构与算法-选择排序tags: go,算法介绍选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。基本思想在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n...原创 2018-12-18 10:26:25 · 243 阅读 · 0 评论 -
Go数据结构与算法-双向冒泡排序(鸡尾酒排序)
title: Go数据结构与算法-双向冒泡排序(鸡尾酒排序)tags: go,算法介绍上一篇我们讲了冒泡排序的优化,现在我们再来优化一下,链表我们有单链表,双链表之分,并且双链表的查询效率比单链表高得多,那么冒泡排序能否双向排序呢?答案是肯定的。基本思想每趟向后遍历排为从低到高,再向前遍历从高到低。排序过程依然使用数组 [29 10 14 37 14][UNSORTED]:...原创 2018-12-18 10:16:18 · 397 阅读 · 0 评论 -
Go数据结构与算法-冒泡算法优化
title: Go数据结构与算法-冒泡排序优化tags: go,算法优化一:检测是否已提前有序假设有数组 [29 10 14 37 14]排序过程[UNSORTED]: [29 10 14 37 14][DEBUG]: [10 29 14 37 14][DEBUG]: [10 14 29 37 14][DEBUG]: [10 14 29 37 14][DEBUG]: ...原创 2018-12-18 10:09:30 · 231 阅读 · 0 评论 -
Go数据结构与算法-冒泡排序
title: Go数据结构与算法-冒泡排序tags: go,算法介绍基本思想两个数比较大小,较大的数下沉,较小的数冒起来。算法复杂度平均时间复杂度O(n2)过程比较相邻的两个数据,如果第二个数小,就交换位置。从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。继续重复上述过程,依次将第2.3…n-1个最小数排好位置。比...原创 2018-12-18 09:59:59 · 287 阅读 · 0 评论 -
Go数据结构与算法-排序算法用到的utils
title: Go数据结构与算法-算法中用到的utils文件tags: go,算法凡是算法中用到的algorithms 都是以下文件utils.gopackage algorithmsimport ( "math/rand" "time")//// 获取 n 个 [0, max] 元素组成的数组//func GetArr(n, max int) []int { r...原创 2018-12-19 20:31:32 · 289 阅读 · 0 评论 -
Go数据结构与算法-实现链式队列
title: Go数据结构与算法-实现链式队列tags: go,算法介绍前面我们看了队列的数组实现,本文来看看用链表实现队列的方法。演示package mainimport "fmt"//链表单节点type QNode struct{ data interface{} //数据 next * QNode //地址}type QueueLink struct{...原创 2018-12-18 09:39:41 · 375 阅读 · 0 评论 -
Go数据结构与算法-双向链表
title: Go数据结构与算法-双向链表tags: go,算法介绍和单链表比较,双向链表的元素不但知道自己下一个节点,还知道自己的上一个节点。向后面车厢的箭头,车尾只有指向前面车厢的箭头。图里面可以看出,每个车厢除了一个指向后面车厢的箭头外,还有一个指向前面车厢的箭头(车头、车尾除外)。车头只有指和单向链表相比的优势插入删除不需要移动元素外,可以原地插入删除可以双向遍历...原创 2018-12-18 09:34:09 · 891 阅读 · 0 评论 -
Go数据结构与算法-实现栈
title: Go数据结构与算法-实现栈tags: go,算法介绍栈(stack),是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。栈的特性:后进先出演示package mainimport ( "errors" "fmt")type StackArray interface{ Clear() Size()int Pop() int...原创 2018-12-18 09:18:09 · 394 阅读 · 0 评论 -
Go数据结构与算法-实现数组队列
title: Go数据结构与算法-实现数组队列tags: go,算法介绍队列(queue), 是一种先进先出的线性表。通常用数据或者链表来实现队列。 队列只允许在后端插入,前端删除操作。队列我们可以想象我们平时排队买票的情况,排在第一位的先买到票,先出队列。排在后面的,后买到票,后出队列。性质:先进先出只能从队尾插入数据演示我们使用切片简单的演示下队列package ...原创 2018-12-13 16:04:07 · 474 阅读 · 0 评论 -
Go数据结构与算法-给List添加迭代器
title: Go数据结构与算法-添加迭代器tags: go,算法介绍在上篇我们用数组完成了对链表的模拟,在之前我们是通过下标来遍历或者查询数据,现在我们来添加迭代器,使我们的模拟更接近。演示//本章代码依赖与上一篇package mainimport ( "errors")//迭代器type Iterator interface { HasNext() bool...原创 2018-12-13 14:56:05 · 582 阅读 · 0 评论 -
Go数据结构与算法-实现List
title: Go数据结构与算法-使用数组模拟链表tags: go,算法介绍我们将使用切片来模拟上篇的链表的功能,实现对切片的增删改查。演示package mainimport ( "errors" "fmt")var ListLength =10 //定义列表全局长度//interface 实例化int,int., string ,stringtype ...原创 2018-12-13 14:06:02 · 546 阅读 · 0 评论 -
Go数据结构与算法-单链表
title: Go数据结构与算法-单链表tags: go,算法介绍相比数组,链表是要稍微复杂一点的数据结构。链表是一种线性表,但是不会按照线性的顺序存储数据,而是在每一个节点里面存到写一个节点的指针。作为单链表它最大的特点就是能随意增加长度,也能随意减少长度。链表的结构我们可以抽象的看成一个火车,火车头代表着链表的头部,车厢代表着链表中的节点,数据则带着每节车厢中的货物。链表的特性...原创 2018-12-13 11:49:15 · 556 阅读 · 0 评论 -
Go数据结构与算法-数组
title: Go数据结构与算法-数组tags: go,算法介绍算法是基于复合数据的之上的,只有当数据超过2个及以上的时候,我们才考虑它们的排序、查询等问题。我们首先要了解下go语言中两种复合数据类型:数组(Array)切片(Slice)数组跟切片都是指向同一类型数据的集合,如int、string、float等数据类型。数组中包含的每个数据被称为数组元素,一个数组包含的元素个数...原创 2018-12-13 11:07:30 · 521 阅读 · 0 评论