加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

自定义堆栈Stack

发布时间:2020-12-16 18:50:39 所属栏目:大数据 来源:网络整理
导读:学习GO中自定义类型的定义,接口和方法的写法 测试用例: https://github.com/panyingyun/gostudy/blob/master/testStack.go package mainimport ("fmt""github.com/panyingyun/gostudy/stacker")func main() {a := stacker.NewStack(2)a.Push("Google")a.Pu

学习GO中自定义类型的定义,接口和方法的写法

测试用例: https://github.com/panyingyun/gostudy/blob/master/testStack.go

package main

import (
	"fmt"
	"github.com/panyingyun/gostudy/stacker"
)

func main() {
	a := stacker.NewStack(2)
	a.Push("Google")
	a.Push(100)
	a.Push([]int{1,2,3})
	fmt.Println(a)
	fmt.Println(a.Len())
	fmt.Println(a.Cap())
	for {
		item,err := a.Pop()
		if err != nil {
			fmt.Println(err)
			break
		}
		fmt.Println(item)
	}
}

stack定义: https://github.com/panyingyun/gostudy/blob/master/stacker/stack.go

package stacker

import (
	"errors"
)

type Stack struct {
	st  []interface{}
	len int
	cap int
}

func NewStack(cap int) *Stack {
	st := make([]interface{},cap)
	return &Stack{st,cap}
}

func (s *Stack) Len() int {
	return s.len
}

func (s *Stack) Cap() int {
	return s.cap
}

func (s *Stack) Push(p interface{}) {
	s.st = append(s.st,p)
	s.len = len(s.st)
	s.cap = cap(s.st)
}

func (s *Stack) Pop() (interface{},error) {
	if s.len == 0 {
		return nil,errors.New("Can't pop an empty stack")
	}
	s.len -= 1
	out := s.st[s.len]
	s.st = s.st[:s.len]
	return out,nil
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读