1 数据结构
数据结构:
type Stack struct {
size int64 //容量
top int64 //栈顶
data []interface{}
}
要实现的功能:
0 栈的初始化
1 获取栈长度
2 入栈
3 出栈
4 清空栈内容
5 判断栈是否为空
6 判断栈是否已满
7 展示所有的内容
2 功能的具体实现
2.0 思路
我们假定栈的容量 size 为5,
第一个元素, 放到下标 index 为 0 的位置, 然后top 移动到 1
第二个元素, 放到下标 index 为 1 的位置, 然后top 移动到 2
...
第5个元素, 放到下标 index 为 4 的位置, 然后top 移动到 5 , 此时 , size = top
所以 , 判断栈是否满 可以通过 size =top 来判断
top = index +1
出栈的时候, top 先 -1, 在从 data 数组中取值
当 top = 0的时候, 栈就空了
2.1栈的初始化
size 为栈的容量
top 表示栈最后一个元素所处的位置, 0表示栈底
func MakeStack(size int64) Stack {
s := Stack{}
s.size = size
s.data = make([]interface{}, size)
s.top = 0
return s
}
2.1入栈
1 刚开始时, 栈的top 为0 , 所以 , 入栈的时候, 先把 元素加入到data中, 在把 top++
func (t *Stack) Push(data interface{}) bool {
if t.isFull() {
fmt.Println("栈已满, 无法加入新元素")
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("栈已空,无法继续弹出")
log.Println("栈已空,无法继续弹出")
return
}
t.top--
r = t.data[t.top]
return
}
判断栈是否为空
func (t *Stack) isEmpty() bool {
return t.top == 0
}
2.3 清空和展示栈的所有内容
//Clear 清空栈
func (t *Stack) Clear() {
t.top = 0
}
// Show 展示所有内容
func (t *Stack) Show() {
var i int64 = 0
for ; i < t.top; i++ {
fmt.Println(t.data[i])
}
}