go 语言实现栈原理
程序员文章站
2022-05-29 08:29:05
package main import "fmt" type StackNode struct { Data interface{} //数据 Next *StackNode //下一个节点 } //创建链栈 func CreateStack(Data ...interface{}) *StackN... ......
package main
import "fmt"
type stacknode struct {
data interface{} //数据
next *stacknode //下一个节点
}
//创建链栈
func createstack(data ...interface{}) *stacknode {
if len(data) == 0 {
return nil
}
s := new(stacknode)
//记录下一个节点
var nextnode *stacknode = nil
for _, v := range data { //1,2,3,4,5
//创建新节点存储数据
newnode := new(stacknode)
newnode.data = v
s = newnode
//如果下一个节点不为空 将当前节点的下一个节点设置上一次节点
//if nextnode != nil {
s.next = nextnode
//}
//下一个节点为当前节点
nextnode = s
}
return s
}
//打印链栈
func printstack(s *stacknode) {
if s == nil {
return
}
for s != nil {
fmt.print(s.data, " ")
s = s.next
}
}
//链栈个数
func lengthstack(s *stacknode) int {
if s == nil {
return -1
}
//循环计算链栈个数
i := 0
for s != nil {
i++
s = s.next
}
return i
}
//入栈
func push(s *stacknode, data interface{}) *stacknode {
if s == nil {
return nil
}
if data == nil {
return s
}
//新建节点
newnode := new(stacknode)
newnode.data = data
newnode.next = s
return newnode
}
//出栈
func pop(s *stacknode) *stacknode {
if s == nil {
return nil
}
nextnode := s.next
s.next = nil
return nextnode
}
//清空链栈
func clear(s *stacknode) *stacknode {
return nil
}
下一篇: Web基础了解版03-jQuery