004 go語(yǔ)言實(shí)現(xiàn)棧

1 數(shù)據(jù)結(jié)構(gòu)

數(shù)據(jù)結(jié)構(gòu):

type Stack struct {
    size int64 //容量
    top  int64 //棧頂
    data []interface{}
}

要實(shí)現(xiàn)的功能:
0 棧的初始化
1 獲取棧長(zhǎng)度
2 入棧
3 出棧
4 清空棧內(nèi)容
5 判斷棧是否為空
6 判斷棧是否已滿
7 展示所有的內(nèi)容

2 功能的具體實(shí)現(xiàn)
2.0 思路

我們假定棧的容量 size 為5,
第一個(gè)元素, 放到下標(biāo) index 為 0 的位置, 然后top 移動(dòng)到 1
第二個(gè)元素, 放到下標(biāo) index 為 1 的位置, 然后top 移動(dòng)到 2
...
第5個(gè)元素, 放到下標(biāo) index 為 4 的位置, 然后top 移動(dòng)到 5 , 此時(shí) , size = top
所以 , 判斷棧是否滿 可以通過(guò) size =top 來(lái)判斷

top = index +1
出棧的時(shí)候, top 先 -1, 在從 data 數(shù)組中取值
當(dāng) top = 0的時(shí)候, 棧就空了

2.1棧的初始化

size 為棧的容量
top 表示棧最后一個(gè)元素所處的位置, 0表示棧底

func MakeStack(size int64) Stack {
    s := Stack{}
    s.size = size
    s.data = make([]interface{}, size)
    s.top = 0
    return s
}
2.1入棧

1 剛開始時(shí), 棧的top 為0 , 所以 , 入棧的時(shí)候, 先把 元素加入到data中, 在把 top++

func (t *Stack) Push(data interface{}) bool {
    if t.isFull() {
        fmt.Println("棧已滿, 無(wú)法加入新元素")
        return false
    }
    t.data[t.top] = data
    t.top++
    return true
}

判斷棧是否已滿

func (t *Stack) isFull() bool {
    return t.top == t.size
}
2.2出棧
func (t *Stack) Pop() (r interface{}, err error) {
    if t.isEmpty() {
        err = fmt.Errorf("棧已空,無(wú)法繼續(xù)彈出")
        log.Println("棧已空,無(wú)法繼續(xù)彈出")
        return
    }
    t.top--
    r = t.data[t.top]
    return
}

判斷棧是否為空

func (t *Stack) isEmpty() bool {
    return t.top == 0
}
2.3 清空和展示棧的所有內(nèi)容

//Clear  清空棧
func (t *Stack) Clear() {
    t.top = 0
}

// Show 展示所有內(nèi)容
func (t *Stack) Show() {
    var i int64 = 0
    for ; i < t.top; i++ {
        fmt.Println(t.data[i])
    }
}

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

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

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