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