首页 > 编程语言 > 详细

go 语言实现栈原理

时间:2019-12-23 09:30:27      阅读:76      评论:0      收藏:0      [点我收藏+]
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
}

 

go 语言实现栈原理

原文:https://www.cnblogs.com/lurenq/p/12081860.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!