go实现数组栈

package main

import (
	"fmt"
	"github.com/pkg/errors"
	"strconv"
)

const (
	SIZE = 10
)
//数组实现顺序栈
type Lister interface {
	New() *ArrayList
	Size() int
	Get(index int)(interface{},error)
	Append(data interface{}) error//追加
	Remove() error
	Clear()
}

type ArrayList struct{
	dataStore[] interface{}
	offset int
}

//检查长度
func (this * ArrayList) Size() int{
	return this.offset
}

//初始化
func (this *ArrayList) New() * ArrayList{
	//创建一个10以内的数组
	this.dataStore = make([]interface{},0,SIZE)
	this.offset = 0
	return this
}


//添加
func (this *ArrayList) Append(data interface{}) error{

	if SIZE - this.offset < 1 {

		return errors.New("客官房间满了")
	}else{
		this.dataStore = append(this.dataStore,data)
		this.offset++
	}

	return nil
}

//查找
func (this * ArrayList) GetByIndex(index int) (interface{},error){

	if this.Size() == 0  {
		return nil,errors.New("先生,没找到您要的客人")
	}

	p := this.dataStore[index]
	if p != ""{
		return p ,nil
	}else{
		return nil,errors.New("先生,没找到您要的客人")
	}
}

//去掉一个元素
func (this *ArrayList) Remove() error {
	if this.Size() == 0 {
		return errors.New("客栈已经没有客人了")
	}

	this.dataStore = append(this.dataStore[:this.offset])
	this.offset--
	return nil
}

//全部清空
func (this * ArrayList) Clear() {
	this.dataStore = make([]interface{},0,10)
	this.offset = 0
}

func main(){
	array := &ArrayList{}
	if array.Size() == 0{
		array.New()
	}

	for i := 1; i < 20; i++{
		name := strconv.Itoa(i) + "号"
		err := array.Append(name)
		if err != nil {
			fmt.Println("第",i,"位客官",err)
		}else{
			fmt.Println("客官请住入天字",i,"号房")
		}
	}

	//查找第5号房间第客人

	p , err := array.GetByIndex(5)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(p)

	//去掉一个元素,后进先出
	fmt.Println(array.Size())
	array.Remove()
	fmt.Println(array.Size())

	//全部清空

	array.Clear()

	fmt.Println(array.Size())
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值