title: Go数据结构与算法-实现链式栈
tags: go,算法
介绍
前面我们看了栈的数组实现,本文来看看用链表实现栈的方法。
演示
package main
import (
"errors"
"fmt"
)
type Node struct{
data interface{}
next * Node
}
type LinkStack interface {
IsEmpty() bool
Push(value interface{})
Pop()(interface{},error)
Length() int
}
func NewStack()*Node{
return &Node{}
}
func (n*Node)IsEmpty() bool{ //判断是否为空
return n.next==nil
}
func (n*Node)Push(value interface{}){
newnode:=&Node{data:value} //初始化
newnode.next=n.next
n.next=newnode
}
func (n*Node)Pop()(interface{},error){
if n.IsEmpty()==true{
return nil,errors.New("bug")
}
value :=n.next.data
n.next=n.next.next
return value,nil
}
func (n*Node)Length() int{
pnext:=n
length:=0
for pnext.next!=nil{//返回长度
pnext=pnext.next
length++
}
return length
}
func main(){
mystack:=NewStack()
for i:=0;i<100;i++{
mystack.Push(i)
}
//fmt.Println(mystack.Pop())
//fmt.Println(mystack.Pop())
for data,err:=mystack.Pop();err==nil;data,err=mystack.Pop(){
fmt.Println(data)
}
}