golang 寫個棧(Stack)數(shù)據(jù)結(jié)構(gòu)

golang暫未有內(nèi)置的Stack數(shù)據(jù)結(jié)構(gòu),工作需要就“借鑒”他人寫了個

import "container/list"

type Stack struct {
    list *list.List
}

func New() *Stack {
    list := list.New()
    return &Stack{
        list: list,
    }
}

func (p *Stack) Push(v interface{}) {
    p.list.PushBack(v)
}

func (p *Stack) Pop() (interface{}, bool) {
    e := p.list.Back()
    if e != nil {
        p.list.Remove(e)
        return e.Value, true
    }
    return nil, false
}

func (p *Stack) Top() (interface{}, bool) {
    e := p.list.Back()
    if e != nil {
        return e.Value, true
    }
    return nil, false
}

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

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

原理就是利用內(nèi)置的list數(shù)據(jù)結(jié)構(gòu)的PushBack,Remove等方法組合來實現(xiàn)進棧、出棧等操作
測試代碼如下

func main() {
    s := stack.New()

    s.Push("hello")
    s.Push("world")

    v, ok := s.Pop()
    fmt.Println(v, ok)

    v, ok = s.Pop()
    fmt.Println(v, ok)

    v, ok = s.Pop()
    fmt.Println(v, ok)
}

輸出:

world true
hello true
<nil> false
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容