go 链表栈
package main
import "fmt"
//链表栈
type LinkStack struct {
root *LinkNode //栈顶
size int //栈的元素数量
}
//栈中的结点
type LinkNode struct {
data int
next *LinkNode
}
func NewLinkStack() *LinkStack {
return &LinkStack{root: nil, size: 0}
}
//入栈
func (link *LinkStack) pushLinkStack(v int) {
//如果栈是空的
if link.root == nil {
node := new(LinkNode)
node.data = v
link.root = node
} else {
//栈不是空的,栈顶是链表头结点,栈底是链表尾结点,入栈的元素为新的头结点,并指向原来的结点
pre := link.root
node := new(LinkNode)
node.data = v
node.next = pre
link.root = node
}
link.size++
}
//出栈 栈顶的元素弹出
func (link *LinkStack) popLinkStack() int {
if link.size == 0 {
panic("empty")
}
top := link.root
v := top.data
link.root = top.next
link.size--
return v
}
//展示栈
func (link *LinkStack) showLinkStack() {
if link.root == nil {
return
}
head := link.root
fmt.Printf("-------------- \n")
for head != nil {
fmt.Printf("栈的元素展示 %v \n", head.data)
head = head.next
}
fmt.Printf("-------------- \n")
}
//栈的大小
func (link *LinkStack) lenLinkStack() int {
fmt.Printf("link 长度 %v", link.size)
return link.size
}
//栈是否为空
func (link *LinkStack) IsEmpty() bool {
return link.size == 0
}
func main() {
linkStack := NewLinkStack()
linkStack.pushLinkStack(12)
linkStack.pushLinkStack(13)
linkStack.showLinkStack()
linkStack.pushLinkStack(17)
linkStack.lenLinkStack()
linkStack.showLinkStack()
linkStack.popLinkStack()
linkStack.showLinkStack()
}
posted on 2023-07-29 22:13 running-fly 阅读(6) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)