golang 队列和栈的实现

栏目: Go · 发布时间: 6年前

内容简介:在 python 中实现队列或者栈非常简单,用list就可以用来做一个简单的栈和队列,如下那么,在 golang 中我们要怎么实现这种简单的队列和栈呢。这个基本和 python 很类似。基本的思路就是这样,但是在实际项目中不要这么使用,这么做会带来内存泄漏的风险。那么这个场景用来干啥呢,刷刷 leetcode 题还是蛮方便的。一般来说会用链表来实现队列和栈,当然 golang 内置的

python 中实现队列或者栈非常简单,用list就可以用来做一个简单的栈和队列,如下

# 队列操作
queue = []
# 入队 由于有append 我们从列表尾入队 列表头出队
queue.append(1)
queue.append(2)
queue.append(3)
# 现在队列的情况是[1,2,3],可以用list的pop方法出队
queue.pop(0)

# 栈的操作跟队列类似
stack = []
# 入栈
stack.append(1)
# 出栈和队列的区别在于 都是在列表尾部操作
stack.pop()

那么,在 golang 中我们要怎么实现这种简单的队列和栈呢。这个基本和 python 很类似。

// 初始化
var queue []int
var stack []int

// 入队 入栈
queue = append(queue, 1)
stack = append(stack, 1)

// 出队 出栈
queue = queue[1: len(queue)]
stack = stack[0: len(queue)]

基本的思路就是这样,但是在实际项目中不要这么使用,这么做会带来内存泄漏的风险。那么这个场景用来干啥呢,刷刷 leetcode 题还是蛮方便的。一般来说会用链表来实现队列和栈,当然 golang 内置的 container/list 库提供了双向链表的数据结构。我们用这个也是很方便的。

import "container/list"

// 初始化
queue := list.New()
stack := list.New()

// 入队 入栈
queue.PushBack(123)
stack.PushBack(123)

// 出队 出栈 返回的数据是结构类型 Value 需要断言成相应的类型
num1 = queue.Front()
queue.Remove(num1)

num2 = queue.Back()
stack.Remove(num2)

这个内置的结构看起来并不是线程安全的。如果要自己实现一个结构,也是可以的。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pro Git

Pro Git

Scott Chacon / Apress / 2009-8-27 / USD 34.99

Git is the version control system developed by Linus Torvalds for Linux kernel development. It took the open source world by storm since its inception in 2005, and is used by small development shops a......一起来看看 《Pro Git》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具