package main
import "fmt"
//节点
type Node struct {
next *Node
data int
}
//链式栈
type LinkStack struct {
head *Node
length int
}
//创建节点
func CreateNode(value int) *Node{
return &Node{
nil,
value,
}
}
//创建链表,初始化一个空头节点
func CreateLinkStack() *LinkStack{
return &LinkStack{
&Node{
nil,
0,
},
0,
}
}
//判断栈是否为空
func (stack *LinkStack)StackEmpty()bool{
return stack.head.next == nil
}
//进栈操作
func (stack *LinkStack)Push(data int){
p := CreateNode(data)
p.next = stack.head.next
stack.head.next = p
stack.length++
}
//出栈操作
func (stack *LinkStack)Pop()int{
if stack.head.next == nil{
return -999
}
p := stack.head.next
data := p.data
stack.head.next = p.next
p = nil
stack.length--
return data
}
//获取栈顶元素
func (stack *LinkStack)Top()int{
if stack.head.next == nil{
return -999
}
data := stack.head.next.data
return data
}
func main(){
stack := CreateLinkStack()
stack.Push(3)
stack.Push(4)
stack.Push(5)
stack.Push(6)
fmt.Printf("%d\n", stack.Top())
stack.Pop()
fmt.Printf("%d\n",stack.Top())
}