首页 > 代码库 > Go数据结构之Stack

Go数据结构之Stack

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