Go语言实现栈的各种操作

1.用数组实现(顺序栈)

package main

import (
   "fmt"
)

type arraystack struct {
   items []string//切片
   count int  //栈中元素个数
   n int  //栈的大小
}

//初始化
func (this *arraystack) arraystack(n int){
   this.n=n
   this.count=0
}

//入栈
func (this *arraystack) push(item string){
   if this.count==this.n {
      fmt.Println("栈空间已满")
      return
   }
   this.items=append(this.items,item)
   this.count++

}

//出栈
func(this *arraystack) pop(){
   if 0==this.count{
      fmt.Println("栈已空")
      return
   }
   this.items=this.items[0:len(this.items)-1]
   this.count--

}

//打印输出
func (this arraystack)printstack(){
   for i:=len(this.items)-1;i>=0;i--{
      fmt.Printf("%s-",this.items[i])
   }
}
func main(){
   stack:=new(arraystack)
   stack.arraystack(5)
   stack.push("1")
   stack.push("2")
   stack.push("3")
   stack.push("4")
   stack.push("5")
   stack.printstack()
   fmt.Println()
   stack.pop()
   stack.printstack()

}

2.用链表实现(链栈)

package main

import "fmt"

// Node 定义节点类型
type Node struct {
	data interface{}
	next *Node
}

// Stack 定义栈类型
type Stack struct {
	topeNode *Node
}

// NewStack 实现了新建一个栈的功能
func NewStack() *Stack {
	return &Stack{nil}
}

// Push 实现了push元素的功能
func (this *Stack) Push(value interface{}) {
	this.topeNode = &Node{value, this.topeNode}
}

// IsEmpty 实现了判断栈是否为空的功能
func (this *Stack) IsEmpty() bool {
	return this.topeNode == nil
}

// Pop 实现了pop的功能
func (this *Stack) Pop() interface{} {
	if this.topeNode == nil {
		return nil
	}
	res := this.topeNode.data
	this.topeNode = this.topeNode.next
	return res

}

//实现了打印的功能

func (this *Stack) Print() {
	if this.topeNode == nil {
		fmt.Println("Empty Stack!")
	}
	cur := this.topeNode
	for nil != cur {
		fmt.Println(cur.data)
		cur = cur.next
	}

}

func main() {

	s := NewStack()
	s.Push(1)
	s.Push(2)
	s.Push(3)
	a := s.Pop()
	fmt.Println(a)
	s.Push(4)
	s.Print()
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值