Stack
一个简单确很有用的数据结构:FILO
package Stack
import (
"errors"
"fmt"
)const (
defaultLength=100
)type Stack struct{
top int
size int
element []interface {}
}
/**
根据给定的大小初始话stack
*/
func NewStackBySize(size int) *Stack{
return &Stack{size,size,make([]interface {},size)}
}
/**
根据默认的大小初始话stack
*/
func NewStack() *Stack{
return NewStackBySize(defaultLength)
}
/**
判断stack是否为空
*/
func (stack *Stack)IsEmpty() bool{
return stack.top==stack.size-1
}
/**
判断stack是否已经满了
*/
func (stack *Stack)IsFull() bool{
return stack.top == 0
}
/**
清空stack
*/
func (stack * Stack)Clear(){
stack.top=stack.size
}
/**
弹出一个元素
*/
func (stack *Stack)Pop() (interface {},error){
if stack.IsEmpty()==true{
return nil, errors.New("The Stack is empty")
}
stack.top=stack.top+1
return stack.element[stack.top-1], nil
}
/**
压入一个元素
*/
func (stack *Stack)Push(e interface {}) error{
if stack.IsFull()==true{
return errors.New("The Stack is full")
}
stack.top=stack.top-1
stack.element[stack.top]=e
return nil
}
func (stack *Stack)PrintStack(){
i:=stack.top
for{
if i==stack.size{
break
}
fmt.Print(stack.element[i],"\n")
i=i+1
}
}