go 语言实现栈原理 - Go语言中文社区

go 语言实现栈原理


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
}

 

版权声明:本文来源博客园,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.cnblogs.com/lurenq/p/12081860.html
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-06 20:43:02
  • 阅读 ( 1239 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢