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])
}
}