Golang 数据结构】的更多相关文章

golang语言的一些数据结构实现,包括: 队列(单队列.循环队列) 链表(单链表.双链表.循环链表(解决约瑟夫环问题)) 栈(实现加减乘除计算) 递归之迷宫问题 哈希表(员工管理系统) 树(三种遍历方式) 排序(冒泡.选择.插入.快速排序) 稀疏数组(存储和读取稀疏数组) 相关代码:https://github.com/taishan1994/golang_data_structure/tree/master…
基础语法差不多了, 就需要系统的撸一下数据结构和算法了. 没找到合适的书, 就参考github项目: https://github.com/floyernick/Data-Structures-and-Algorithms/ 注意golang里没有main函数,不能执行, 测试时,使用go test即可. BinarySearch.go package BinarySearch //二分法查找 func BinarySearch(array []int, number int) int { mi…
每种语言在实现数据结构有些许不同.go 是如何实现的呢? 1. 数组 Array go 中数组是相同的元素组成的集合,计算机会为数组分配一段连续的内存来保存元素,可以利用索引快速访问元素. go 中数组用两个维度来描述:元素类型 和 元素个数.元素类型相同,大小不同的数组在 go 中被认为是不同的数据类型.只有两者完全相同才是相同的类型. 数组在舒适化之后大小就无法改变了. 数组的长度是固定的,数据越界是严重的错误,但在编译阶段 go 自动检查越界问题. package main import…
队列可以用数组或链表实现,遵从先入先出. 目录结构: 在main中调用queue包中的属性和方法,如何调用参考另一篇文章: https://www.cnblogs.com/xiximayou/p/12005480.html 一个队列需要有四要素:容量.队首指针.队尾指针.存储数据的数组: 当队尾指针==容量-1时,此时队列已满,就不能再有数据进队: 当队首指针==队尾指针时,此时队列已空,就不能再从队列中取出数据: 同时可以发现,这种队列只能使用一次,因为那时队首和队尾都指向队尾了. 代码如下:…
循环链表还是挺有难度的: 向链表中插入第一条数据的时候如何进行初始化. 删除循环链表中的数据时要考虑多种情况. 详情在代码中一一说明. 目录结构如下: circleLink.go package link import ( "fmt" ) type CatNode struct { ID int Name string next *CatNode } func InserCatNode(head *CatNode, newCatNode *CatNode) { //初始化链表 //头结…
tree.go package tree import ( "fmt" ) type TreeNode struct { ID int Val int Left *TreeNode Right *TreeNode } func PreOrder(root *TreeNode) { if root != nil { fmt.Printf("%d ", root.Val) PreOrder(root.Left) PreOrder(root.Right) } } func…
hash.go package hash import ( "fmt" ) type Emp struct { ID int Name string Next *Emp } //第一个节点就存放员工 type EmpLink struct { Head *Emp } //定义HashTable type HashTable struct { LinkArr []EmpLink } //添加员工的方法 func (empl *EmpLink) InsertEmp(emp *Emp) {…
简单来说:递归就是函数/方法自己调用自己,只是每次传入不同的变量. 递归可以解决各种数学问题:n皇后问题.阶乘问题.汉诺塔.迷宫问题.球和篮子问题等等: maze.go package maze import ( "fmt" ) func SetWay(myMap *[][]int, i int, j int) bool { //分析什么情况下就找到通路 ][] == { return true } else { //如果是可以探测的 { //假设是通的 myMap[i][j] = /…
例如:3+2*6-2 先定义两个栈,一个为数值栈,一个为运算符栈: stack.go package stack import ( "errors" "fmt" ) type Stack struct { MaxTop int //栈最大可以存放的数量 Top int //栈顶 Arr []int //模拟栈 } func (s *Stack) Push(val int) (err error) { //先判断栈是否满了 { fmt.Println("栈满…
stack.go package stack import ( "errors" "fmt" ) type Stack struct { MaxTop int //栈最大可以存放的数量 Top int //栈顶 arr []int //模拟栈 } func (s *Stack) Push(val int) (err error) { //先判断栈是否满了 { fmt.Println("栈满了") return errors.New("栈…