欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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
}