一、栈的介绍
- 栈是一个先入后出(FILO-First In Last Out)的有序列表,可以抽象成一个存放子弹的盒子(先入后出来)。
- 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
- 根据堆栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。

二、代码示例
package main
import (
"fmt"
)
//使用数组来模拟一个栈的使用
type Stack struct {
MaxTop int // 表示我们栈最大可以存放数个数
Top int // 表示栈顶, 因为栈顶固定,因此我们直接使用 Top
arr [5]int // 数组模拟栈
}
//入栈
func (this *Stack) Push(val int) {
if this.Top == this.MaxTop -1 {
fmt.Print("栈满了")
return
}
this.Top++
this.arr[this.Top] = val
return
}
//出栈
func (this *Stack) Pop() () {
if this.Top == -1{
fmt.Println("栈里没有数拒了")
return
}
fmt.Println(this.arr[this.Top])
this.Top--
}
//遍历栈,注意需要从栈顶开始遍历
func (this *Stack) List() {
for {
if this.Top == -1 {
fmt.Print("展示栈里没有数据")
return
}
fmt.Println(this.arr[this.Top])
this.Top--
}
}
func main() {
//定义栈
stack := Stack{MaxTop:5,Top:-1}
//入栈
stack.Push(1)
stack.Push(2)
stack.Push(3)
stack.Push(4)
stack.Push(5)
//展示
//stack.List()
//出栈
stack.Pop()
stack.Pop()
stack.Pop()
stack.Pop()
stack.Pop()
}