分享
数据结构之栈go言语实现
tangguangqiang · · 1762 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
package main
import (
"fmt"
"os"
)
type Node struct {
val int
pNode *Node
}
type Stack struct {
pTop,pBottom *Node
}
func initStack(pStack *Stack){
pNew:=new(Node)
pNew.pNode=nil
pStack.pTop=pNew
pStack.pBottom=pNew
if pStack.pTop==nil || pStack.pBottom==nil {
fmt.Println("分配头节点内存失败,程序退出")
os.Exit(-1)
}
}
func push(pStack *Stack,val int) {
pNew:=new(Node)
pNew.val=val
if pNew==nil {
fmt.Println("分配头节点内存失败,程序退出")
os.Exit(-1)
}
pNew.pNode=pStack.pTop
pStack.pTop=pNew
}
func pop(pStack *Stack)(bool ,int) {
if isempty(pStack) {
return false,0
}
reval:=pStack.pTop.val
pStack.pTop=pStack.pTop.pNode
return true,reval
}
func isempty(pStack *Stack)bool {
if pStack.pTop==pStack.pBottom{
return true
}
return false
}
func traverse(pStack *Stack){
if isempty(pStack) {
return
}
p:=pStack.pTop
for ;p!=pStack.pBottom;p=p.pNode {
fmt.Printf("%d ",p.val)
}
fmt.Println()
}
func clear(pStack *Stack){
if isempty(pStack) {
return
}
pStack.pTop=pStack.pBottom
}
func main() {
var pstack Stack
initStack(&pstack)
rebool,reval:=pop(&pstack)
if rebool {
fmt.Printf("出栈成功,出栈值为:%d\n",reval)
} else {
fmt.Println("出栈出错")
}
traverse(&pstack)
clear(&pstack)
traverse(&pstack)
}有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信1762 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
package main
import (
"fmt"
"os"
)
type Node struct {
val int
pNode *Node
}
type Stack struct {
pTop,pBottom *Node
}
func initStack(pStack *Stack){
pNew:=new(Node)
pNew.pNode=nil
pStack.pTop=pNew
pStack.pBottom=pNew
if pStack.pTop==nil || pStack.pBottom==nil {
fmt.Println("分配头节点内存失败,程序退出")
os.Exit(-1)
}
}
func push(pStack *Stack,val int) {
pNew:=new(Node)
pNew.val=val
if pNew==nil {
fmt.Println("分配头节点内存失败,程序退出")
os.Exit(-1)
}
pNew.pNode=pStack.pTop
pStack.pTop=pNew
}
func pop(pStack *Stack)(bool ,int) {
if isempty(pStack) {
return false,0
}
reval:=pStack.pTop.val
pStack.pTop=pStack.pTop.pNode
return true,reval
}
func isempty(pStack *Stack)bool {
if pStack.pTop==pStack.pBottom{
return true
}
return false
}
func traverse(pStack *Stack){
if isempty(pStack) {
return
}
p:=pStack.pTop
for ;p!=pStack.pBottom;p=p.pNode {
fmt.Printf("%d ",p.val)
}
fmt.Println()
}
func clear(pStack *Stack){
if isempty(pStack) {
return
}
pStack.pTop=pStack.pBottom
}
func main() {
var pstack Stack
initStack(&pstack)
rebool,reval:=pop(&pstack)
if rebool {
fmt.Printf("出栈成功,出栈值为:%d\n",reval)
} else {
fmt.Println("出栈出错")
}
traverse(&pstack)
clear(&pstack)
traverse(&pstack)
}