理论介绍
栈(stack),是计算机科学中一种特殊的串列形式的抽象数据类型,其也通常使用链表或者数据来实现, 与队列不用,栈的性质是后进先出。也就是只能总栈的顶部插入元素与取出元素。
性质:
后进先出
代码实现
package stack
type Item interface {
}
// ItemStack the stack of items
type ItemStack struct {
items []Item
}
// New Create a new ItemStack
func (s *ItemStack) New() *ItemStack {
s.items = []Item{}
return s
}
// Push adds an Item to the top of the stack
func (s *ItemStack) Push(t Item) {
s.items = append(s.items, t)
}
// Pop removes an Item from the top of the stack
func (s *ItemStack) Pop() *Item {
item := s.items[len(s.items)-1] // 后进先出
s.items = s.items[0:len(s.items)-1]
return &item
}
测试代码
package stack
import "testing"
var s ItemStack
func initStack() *ItemStack {
if s.items == nil{
s = ItemStack{}
s.New()
}
return &s
}
func TestItemStack_Push(t *testing.T) {
s := initStack()
s.Push(1)
s.Push(2)
s.Push(3)
if size := len(s.items); size != 3{
t.Errorf("test failed ")
}
}
func TestItemStack_Pop(t *testing.T) {
s.Pop()
if size := len(s.items); size !=2 {
t.Errorf("test failed, excepted 2 and got %d", size)
}
s.Pop()
s.Pop()
if size := len(s.items); size != 0{
t.Errorf("test failed, excepted 0 and got %d", size)
}
}
理解了前面的队列,栈也很容易理解,大家可以直接看代码,有疑问留言即可,代码都在下面的项目地址里。