基础篇——Go语言栈实现

理论介绍

栈(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)
    }
}

理解了前面的队列,栈也很容易理解,大家可以直接看代码,有疑问留言即可,代码都在下面的项目地址里。

项目地址

参考教程

猜你喜欢

转载自blog.csdn.net/afar_ch/article/details/81153183
今日推荐