栈的介绍:
- 栈是一个先入后出的有序列表
- 栈(stack)是线制性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(top),另一端为固定的一端,称为栈底(Bottom)。
- 栈和堆栈是同一个概念
- 最先放入栈中的元素在栈底,最后放入的元素在栈顶
- 删除元素:最后放入栈中的元素先删除,最先放入的最后删除
- 栈的使用场景:子程序的调用(在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中),递归,表达式的转换与求值等
示意图:
栈的实现有两种方法,分别为采用数组来实现和采用链表来实现,这里我们采用数组来实现。
解题思路:
- 可以把数组的首元素当作栈底,同时记录栈中元素的个数size
- 如图,压栈的操作是把待压栈的元素放到数组arr[size]中,然后执行size++操作。
- 同2原理,弹栈操作是取数组arr[size-1]元素,然后执行size–操作。
- 根据以上分析可以很容易实现栈
代码如下:
package main
import (
"errors"
"fmt"
)
//使用结构体管理栈
type sliceStack struct {
arr []interface{
} //切片
stackSize int //栈中元素的个数
}
//创建栈
func newSliceStack() *sliceStack {
return &sliceStack{
arr: make([]interface{
}, 0)}