go实现stack

go语言:实现一个stack算法(附完整源码) 阅读详情

由于golang未封装stack相关的类,所以自行封装,不过go里面的list可以实现stack的功能
list详解

下面两份代码实现功能相同

list实现

func main() {
	list := list.New()
	list.PushBack("bai")
	list.PushBack("21")
	list.PushBack("cn")
	list.PushBack("com")
	fmt.Println(list.Len())
	fmt.Println(list.Back().Value)
	fmt.Println(list.Remove(list.Back()))
	fmt.Println(list.Len())
	fmt.Println(list.Back().Value)
}

list实现stack后实现

type Stack struct {
	list *list.List
}

func NewStack() *Stack {
	//初始化list
	list := list.New()
	return &Stack{list}
}

func (stack *Stack) Push(value interface{}) {
	stack.list.PushBack(value)
}

func (stack *Stack) Pop() interface{} {
	v := stack.list.Back()
	if v != nil {
		stack.list.Remove(v)
		return v.Value
	}
	return nil
}

func (stack *Stack) Peak() interface{} {
	v := stack.list.Back()
	if v != nil {
		return v.Value
	}
	return nil
}

func (stack *Stack) Len() int {
	return stack.list.Len()
}

func (stack *Stack) Empty() bool {
	return stack.list.Len() == 0
}

func main() {
	stack := NewStack()
	stack.Push("bai")
	stack.Push("21")
	stack.Push("cn")
	stack.Push("com")
	fmt.Println(stack.Len())
	fmt.Println(stack.Peak())
	fmt.Println(stack.Pop())
	fmt.Println(stack.Len())
	fmt.Println(stack.Peak())
}

运行结果

4
com
com
3
cn

gostack:Golang 的 Goroutine Stack Profiler 工具 去堆栈 Go Stack 是一个 goroutine 堆栈配置文件解析库和用于检查配置文件的附带gstack命令。 现在它只是一个玩具,但也许有一天它会成为从 goroutine 堆栈配置文件中快速收集数据的有用方法。 请参阅。 或者安装gstack工具: go get -u github.com/schmichael/gostack/cmd/gstack 立即下载

相关推荐

西门子RS485自由口通信Modbus RTU 通信协议

部分西门子的RS485模块不能使用西门子自带的Modbus RTU通信指令,需要通过自己拼接、发送、接收和解析报文完成Modbus RTU通信。通过多次尝试完成该功能: #R_TRIG_Instance(CLK := #触发, Q => #触发上升沿); IF #触发上升沿 THEN // 触发后先将读取完成复位 #读写完成 := 0; END_IF; CASE #功能码 OF 1: // 线圈状态读取 ; 2:

qq_20792765的博客 1万+

Go堆栈的理解

什么是堆栈? 在计算机中堆栈的概念分为:数据结构的堆栈和内存分配中的堆栈。 数据结构的堆和栈: 堆:堆可以看成是一颗树,如:堆排序。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样具有优先权。堆即为解决此类问题设计的一种数据结构。 通俗理解:堆像一颗倒过来的树。,堆是一种经过排序的树形结构。每一个节点都有一个值。 通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根节点的值最小(或最大)。且根节点的

weixin_44014995的博客 1048

vivado Block Design 设计 .tcl 文件使用,导出,修改,添加方式

在vivado中生成 Block Design可以导出tcl文件进行保存(体积小),或者在别的版本vivado中打开(版本互通),这是一个非常好的功能。另外GitHub中很多项目都是采用这种方式上传的,学会如何使用可以快速修改历程项目。

2203_75345038的博客 2493

Go的数据结构与实现【Stack】

栈是存放值的一种特殊容器,在插入与删除值时,这种结构遵循后进先出(Last-in-first-out,LIFO)的原则,也就是说,值可以任意插入栈中,但每次取出的都是此前插入的最后一个值。

ldxxxxll的博客 657

基于DPABI和SPM12的任务态fMRI分析笔记1——预处理

前言 原理简介 预处理

Sophia2023的博客 1万+

Ansys Zemax实战:5步搞定衍射光学元件(DOE)设计,附赠超透镜(metalens)避坑指南

本文详细介绍了使用Ansys Zemax进行衍射光学元件(DOE)和超透镜(metalens)设计的5步实战流程。从基础光学系统搭建到相位面设计验证,再到制造准备与实测对比,全面解析了OpticStudio中的关键技巧和常见避坑指南,帮助工程师高效完成复杂光学元件设计。

orange的博客 618

【亲测免费】 探秘高效开发利器:go-stack/stack 代码库

探秘高效开发利器:go-stack/stack 代码库 在编程世界中,效率和可维护性是开发者们永恒的追求。今天我们要介绍一个非常实用的开源项目,,它是一个由 Go 语言编写的堆栈管理工具,旨在帮助开发者更轻松地处理程序中的堆栈信息,提升调试和问题定位的效率。 项目简介 go-stack/stack 是一个轻量级的库,主要为 Go 程序提供了一个简洁而强大的堆栈跟踪接口。通过这个库,开发者可以在遇到...

gitblog_00092的博客 620

Hyper-V虚拟机 安装 银河麒麟V10桌面版

如何在windows 11 Hyper-V 虚拟机中 安装 银河麒麟V10桌面版。

m0_46756112的博客 3418

探索Go语言的堆栈处理艺术 —— go-stack/stack

探索Go语言的堆栈处理艺术 —— go-stack/stack 项目基础介绍及编程语言 go-stack/stack 是一个由Golang编写的开源项目,专为Go开发者设计,旨在简化调用堆栈的操作、捕获以及格式化过程。它提供了一个比标准库runtime更为直观且易用的API接口,使得开发者能够更加便捷地理解和调试程序运行时的堆栈信息。 核心功能 此项目核心在于其提供了丰富的工具来处理Go程序的调用...

gitblog_01199的博客 493

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4011

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 705

Go数据结构之栈 stack

package main import ( //"errors" "fmt" ) type stack struct { size int // 栈容量 top int // 栈顶 data []interface{} // 数据 } const stackSize = 15 var stackData = make([]interface{}, stackSize) // 初始化栈 func initStack() stack { s := stack{ size: stac.

u013919855的博客 397

【QT开发教程】QMatrix4x4类详解及实战应用:Qt中的4x4矩阵变换

在计算机图形学和三维图形应用中,矩阵变换是一个核心概念。Qt框架提供了QMatrix4x4类,用于处理4x4矩阵变换,帮助开发者在三维空间中进行复杂的几何计算。本文将深入探讨QMatrix4x4的功能及其在Qt应用中的实际应用。

科技改变人类,技术成就未来 716

GOLANG 实现Stack和Queue

最近在学习go语言,go是google公司开发的一种服务器端语言,原生提供的go程具有强大的并发能力,语言简洁、干净,没有太多语法糖,但其表达能力一点都不比其他语言弱。go语言中有指针的概念,可以非常方便的实现Stack和Queue,我的实现里没有使用go库中的list,下面就是实现代码:Queue实现type Node struct { data interface{} next

zanliang的博客 4272

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Go实现List、Set、Stack、Deque等数据结构

Go实现List、Set、Stack、Deque等数据结构

weixin_45565886的博客 1261

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Go语言实现堆栈(Stack)

package main //Stack //author:Xiong Chuan Liang //date:2015-1-30 import ( "fmt" "github.com/xcltapestry/xclpkg/algorithm" ) func main(){ stack := algorithm.NewStack() if stack.Empty() { f

拙言的专栏 6654

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

go Stack 简单实现

package main import ( "fmt" ) type Stack struct { top int data [10]int } func initStack(s *Stack) { s.top = 0 } func push(s *Stack, element int) { s.data[s.top] = element s.top++ } func po

懒仔仔 1205

golang实现stack的操作

栈的Golang实现过程 自己写了一个Stack的实现方式, 三种方法 自己写的 通过golang的slice方式实现, 偏向结构化的方式实现; func PushS(s *[]int, v int) { fmt.Printf("%p, %p\n", s, *s) *s = append(*s, v) } func PopS(s *[]int) int { i...

dibao6752的博客 611

golang实现stack

文章目录方案1:使用slice方案2:使用container.list应用场景参考资料 golang没有提供stack的实现,只能自己搞一把了。 方案1:使用slice type IntStack struct { list []int } func (s *IntStack) Empty() bool { return len(s.list) == 0 } func (s *IntStack) Push(item int) { s.list = append(s.list, item) }

梧桐客栈 820

04.go实现(stack)栈

import "fmt" type Stack struct { data []interface{} } func (s *Stack) Push(k interface{}) { s.data = append(s.data, k) } func (s *Stack) Pop() interface{} { if len(s.data) == 0 { return nil } n := len(s.data) - 1 v := s.data[n] s.data = s.data[

apple_56973763的博客 215

go语言实现stack

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33973600的博客 115

数据结构STL——golang实现栈stack

github仓库存储地址:https://github.com/hlccd/goSTL 概述 ​ 栈(stack)是一个线性容器,但不同于其他容器的特点在于,栈是仅仅支持从顶部插入和从顶部删除的操作,即单向删除和添加。 ​ 对于stack的实现,考虑到它是一个线性容器,并且其中的元素仅可通过顶部添加和删除即单项增删,所以可以考虑其底层使用动态数组的形式实现,考虑到动态数组需要自行对分配空间进行操作,同时它也类似于vector进行单项操作的情况,所以它的扩容缩容策略同vector一样,但不同点在于它只能使

l2975的博客 744

Golang 实现栈(Stack)数据结构

Golang 实现栈(Stack)数据结构

DogMonkeys的博客 1515

如何使用Go实现一个Stack和Queue?

可以使用 slice 实现如下: type Stack [] int func (s Stack) Empty() bool{return len(s) == 0} func (s *Stack) Push(v int) { *s = append(*s, v) } func (s *Stack)Pop() int { v := (*s)[len(*s) - 1] *s = (*s)[:...

weixin_44328662的博客 361

Go 用list实现stack和queue

go的container/list 包里面带的list,有在链表头部和尾巴插入元素,和获取头部和尾部元素的操作,因此我们可以用list来实现栈和队列的功能。 import ( "container/list" "fmt" ) func StackTest() { stack := list.New() for i := 0; i < 5; i++ { ...

jiang_mingyi的博客 2035

Go(单链表)实现简单Stack

//to implement a stack package main import ( "fmt" "os" ) type Stack struct { data interface{} next *Stack } //inition func (s *Stack) Ini...

chiqiaoji2865的博客 164
上一篇: Go Web跨域问题解决
下一篇: 系统设计思路
code_AC
博客等级 码龄12年 255粉丝 109原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值