首页 > 其他分享 >GO 栈

GO 栈

时间:2022-09-18 20:25:06浏览次数:67  
标签:arr val Top stack Push GO fmt

栈的介绍

有些程序员也把栈称为堆栈,即栈和堆栈是同一个概念
栈的英文为(stack)
栈是一个先入后出(FILO-First In Last Out)的有序列表。
栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。
根据堆栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除

package main

import (
   "errors"
   "fmt"
)

type Stack struct {
   MaxTop int    //表示我们栈最大可以存放数个数
   Top    int    //表示栈顶,因为栈顶固定,因此我们直接使用Top
   arr    [5]int // 数组模拟栈
}

func (this *Stack) Push(val int) (err error) {
   //先判断栈是否满了
   if this.Top == this.MaxTop-1 {
      fmt.Println("stack full")
      return errors.New("stack full")
   }

   this.Top++
   this.arr[this.Top] = val
   return
}

func (this *Stack) Pop() (val int, err error) {
   //判断栈是否为空
   if this.Top == -1 {
      fmt.Println("stack empty")
      return 0, errors.New("stack empty")
   }

   //先去值
   val = this.arr[this.Top]
   this.Top--
   return val, nil
}

func (this *Stack) List() {
   //先判断是否为空
   if this.Top == -1 {
      fmt.Println("stack empty")
      return
   }
   for i := this.Top; i >= 0; i-- {
      fmt.Printf("arr[%d] = %d \n", i, this.arr[i])
   }
}

func main() {
   stack := &Stack{
      MaxTop: 5,
      Top:    -1, //-1 表示栈为空
   }
   stack.Push(1)
   stack.Push(2)
   stack.Push(3)
   stack.Push(4)
   stack.Push(5)
   //stack.Push(6)
   stack.List()

   val, _ := stack.Pop()
   fmt.Println("出栈一个 ", val)
   val, _ = stack.Pop()
   fmt.Println("出栈一个 ", val)

   stack.List()
}

 

标签:arr,val,Top,stack,Push,GO,fmt
From: https://www.cnblogs.com/wuchangblog/p/16705637.html

相关文章

  • buf connect-go 试用
    golang包含一个grpc-web可以让浏览器运行grpc,但是是需要一些中间件工具的,connect-go简化了处理,可以基于post通过http协议就可以试用grpc了包含的特性基于http......
  • Go 双向链表
    1.双向链表的应用实例使用带head头的双向链表实现——王者容易英雄排行榜单向链表的缺点分析:1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找2)单向......
  • Go 单向环形链表
    单向环形链表单向环形链表是一种特殊的单向链表。单向链表最后一个节点的Next指针指向空。而单向环形链表最后一个节点的Next指针指向头节点。如图所示: packa......
  • Go 学习(一) : Get started with Go
    安装gohttps://go.dev/doc/install安装以后命令行执行goversion然后随便创建一个文件,比如hello.gopackagemainimport"fmt"funcmain(){ fmt.Printl......
  • Go 单链表2
    插入节点1)、头插法packagemainimport"fmt"typeNodestruct{dataintnext*Node}funcShownode(p*Node){//遍历forp!=nil{fm......
  • 使用pymongo管理MongoDB
    基于pymongo的MongoDB系列操作,会不定时补充更新frompymongoimportMongoClientimportpymongoimportdatetime##连接本地MongoDBclient=MongoClient("mongodb:......
  • golang air 热部署
    1、安装在这里就介绍大众使用的两个版本MacOS和Windows;(建议使用第一种)//1.16可以同时使用这两种方法goget-ugithub.com/cosmtrek/air//1.16......
  • 关于朋友圈出现的小米新店广告骗局(非法获取个人消息)木马通过广东政务服务网(tyrz.gd.g
     前两天在朋友圈突然看到有发小米新店开业送千台扫地机器人的广告,出于天上不会掉馅饼到我身上的原则我选择忽略了,但是没多久看到他又晒了个物流订单,于是还是点开看......
  • go-cqhttp调用接口
    目录调用接口一、概述1、简介2、接口二、接入权限系统1、智能聊天2、戳一戳3、新成员三、调用接口1、查找接口2、调用接口3、接入机器人调用接口一、概述1......
  • 第六章 MongoDB数据库开发
    FireDAC也在DX10的版本中开始加入支持NoSQL型态的数据库,并选择其中最为流行的MongoDB为第1个支持的目标。MongoDB的数据体结构是以 (Key,Value)组合的,储存的方式是使......