博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用golang的slice来模拟栈
阅读量:7242 次
发布时间:2019-06-29

本文共 1505 字,大约阅读时间需要 5 分钟。

  • slice(切片):底层数据结构是数组
  • stack(栈):一种先进后出的数据结构
普通版的模拟写入和读取的栈
package mainimport "fmt"//栈的特点是先进后出//使用一个切片的全局变量来模拟栈var stack []int//向栈中添加数据func push(value int) {    stack = append(stack, value)}//从栈中获取数据func pop() (int, bool) {    ok := false    value := 0    if len(stack) > 0 {        value = stack[len(stack)-1]        stack = stack[:len(stack)-1]        ok = true        return value, ok    } else {        return value, ok    }}func main() {    //向栈中添加数据    for i := 0; i < 10; i++ {        push(i)        fmt.Println(stack)    }    //从栈中获取数据    for {        v, ok := pop()        if ok {            fmt.Println(v)        } else {            break        }    }}

 

使用goroutine来异步读取栈中数据或往栈中写入数据
package mainimport (    "fmt")//栈的特点是先进后出//使用一个切片的全局变量来模拟栈var stack1 []int//此通道用于通知主协程已经完成操作了//但是此操作有可能不会输出全部数据//因为添加数据和获取数据是异步的//当获取数据的速度快于写入数据//便不会输出全部数据var e chan int = make(chan int)//向栈中添加数据func push1(value int) {    stack1 = append(stack1, value)    fmt.Println(stack1)}//从栈中获取数据func pop1() {    for {        if len(stack1) > 0 {            value := stack1[len(stack1)-1]            stack1 = stack1[:len(stack1)-1]            fmt.Println(value)        } else {            e <- 0        }    }}func main() {    for i := 0; i < 10; i++ {        go push1(i)    }    go pop1()    <-e}

 

输出:

[1][1 6 5 9 3 2 7 0 4][1 6 5 9 3 2 7 0 4 8][1 6 5][1 6][1 6 5 9 3 2 7 0][1 6 5 9][1 6 5 9 3 2][1 6 5 9 3 2 7]8407239561[1 6 5 9 3]

使用goroutine异步读取或者写入的时一定要注意通道的写法,很容易造成死锁

转载于:https://www.cnblogs.com/TimLiuDream/p/9902496.html

你可能感兴趣的文章
飞雪连天射白鹿笑书神侠倚碧鸳
查看>>
《1024伐木累》-小白篇之开发网站,三天!(中篇-3)-总章节十二
查看>>
exit(0)、exit(1)和return
查看>>
Tomcat启动时项目重复加载的问题
查看>>
jackrabbit学习笔记(1)
查看>>
递归算法的设计
查看>>
计算机技术与科学系列笔记
查看>>
Steps to developing Metro style apps 第一章-Creat a UI(2)(1)
查看>>
逻辑推理面试题
查看>>
MongoDb进阶实践之八 MongoDB的聚合初探
查看>>
JavaScript函数表达式
查看>>
大佬的矩阵板子
查看>>
30岁前挣够500万
查看>>
Spring系列(二):Spring IoC/DI的理解
查看>>
transition 两个便签切换,同时在动解决 <transition name="move" mode="out-in" appear> appear属性页面加载动画就开始...
查看>>
js/jq基础(日常整理记录)-4-一个简单的自定义tree插件
查看>>
第三章总结
查看>>
sourceinsight - imsoft.cnblogs
查看>>
20050612:旧的不去
查看>>
xe 最大连接数限制、记录客户连接、心跳
查看>>