1.用数组实现(顺序栈)
package main
import (
"fmt"
)
type arraystack struct {
items []string//切片
count int //栈中元素个数
n int //栈的大小
}
//初始化
func (this *arraystack) arraystack(n int){
this.n=n
this.count=0
}
//入栈
func (this *arraystack) push(item string){
if this.count==this.n {
fmt.Println("栈空间已满")
return
}
this.items=append(this.items,item)
this.count++
}
//出栈
func(this *arraystack) pop(){
if 0==this.count{
fmt.Println("栈已空")
return
}
this.items=this.items[0:len(this.items)-1]
this.count--
}
//打印输出
func (this arraystack)printstack(){
for i:=len(this.items)-1;i>=0;i--{
fmt.Printf("%s-",this.items[i])
}
}
func main(){
stack:=new(arraystack)
stack.arraystack(5)
stack.push("1")
stack.push("2")
stack.push("3")
stack.push("4")
stack.push("5")
stack.printstack()
fmt.Println()
stack.pop()
stack.printstack()
}
2.用链表实现(链栈)
package main
import "fmt"
// Node 定义节点类型
type Node struct {
data interface{}
next *Node
}
// Stack 定义栈类型
type Stack struct {
topeNode *Node
}
// NewStack 实现了新建一个栈的功能
func NewStack() *Stack {
return &Stack{nil}
}
// Push 实现了push元素的功能
func (this *Stack) Push(value interface{}) {
this.topeNode = &Node{value, this.topeNode}
}
// IsEmpty 实现了判断栈是否为空的功能
func (this *Stack) IsEmpty() bool {
return this.topeNode == nil
}
// Pop 实现了pop的功能
func (this *Stack) Pop() interface{} {
if this.topeNode == nil {
return nil
}
res := this.topeNode.data
this.topeNode = this.topeNode.next
return res
}
//实现了打印的功能
func (this *Stack) Print() {
if this.topeNode == nil {
fmt.Println("Empty Stack!")
}
cur := this.topeNode
for nil != cur {
fmt.Println(cur.data)
cur = cur.next
}
}
func main() {
s := NewStack()
s.Push(1)
s.Push(2)
s.Push(3)
a := s.Pop()
fmt.Println(a)
s.Push(4)
s.Print()
}