为了账号安全,请及时绑定邮箱和手机立即绑定

在 golang 中寻找合理的堆栈实现?

在 golang 中寻找合理的堆栈实现?

Go
qq_遁去的一_1 2021-09-13 16:53:02
到目前为止,我天真的方法是type stack []intfunc (s *stack) Push(v int) {    *s = append(*s, v)}func (s *stack) Pop() int {    res:=(*s)[len(*s)-1]    *s=(*s)[:len(*s)-1]    return res}它有效 - playground,但看起来很丑并且有太多的取消引用。我能做得更好吗?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

这是使用链接数据结构的 LIFO 实现


package stack


import "sync"


type element struct {

    data interface{}

    next *element

}


type stack struct {

    lock *sync.Mutex

    head *element

    Size int

}


func (stk *stack) Push(data interface{}) {

    stk.lock.Lock()


    element := new(element)

    element.data = data

    temp := stk.head

    element.next = temp

    stk.head = element

    stk.Size++


    stk.lock.Unlock()

}


func (stk *stack) Pop() interface{} {

    if stk.head == nil {

        return nil

    }

    stk.lock.Lock()

    r := stk.head.data

    stk.head = stk.head.next

    stk.Size--


    stk.lock.Unlock()


    return r

}


func New() *stack {

    stk := new(stack)

    stk.lock = &sync.Mutex{}


    return stk

}



查看完整回答
反对 回复 2021-09-13
  • 3 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信