// stack 栈
package Algorithmimport ("errors""reflect"
)// 栈定义
type Stack struct {values    []interface{}valueType reflect.Type
}// 构造栈
func NewStack(valueType reflect.Type) *Stack {return &Stack{values: make([]interface{}, 0), valueType: valueType}
}// 判断值是否符合栈类型
func (stack *Stack) isAcceptableValue(value interface{}) bool {if value == nil || reflect.TypeOf(value) != stack.valueType {return false}return true
}// 入栈
func (stack *Stack) Push(v interface{}) bool {if !stack.isAcceptableValue(v) {return false}stack.values = append(stack.values, v)return true
}// 出栈
func (stack *Stack) Pop() (interface{}, error) {if stack == nil || len(stack.values) == 0 {return nil, errors.New("stack empty")}v := stack.values[len(stack.values)-1]stack.values = stack.values[:len(stack.values)-1]return v, nil
}// 获取栈顶元素
func (stack *Stack) Top() (interface{}, error) {if stack == nil || len(stack.values) == 0 {return nil, errors.New("stack empty")}return stack.values[len(stack.values)-1], nil
}// 获取栈内元素个数
func (stack *Stack) Len() int {return len(stack.values)
}// 判断栈是否为空
func (stack *Stack) Empty() bool {if stack == nil || len(stack.values) == 0 {return true}return false
}// 获取栈内元素类型
func (stack *Stack) ValueType() reflect.Type {return stack.valueType
}

github链接地址:https://github.com/gaopeng527/go_Algorithm/blob/master/stack.go

Go语言栈定义及相关方法实现相关推荐

  1. c语言限流,C语言—栈

    栈的操作:进栈和出栈 #include "stdafx.h" #include "stack.h" #define maxsize 20 typedef int ...

  2. 饿了么交付中心语言栈转型总结

    Photo @NeONBRAN 文 | 李杰 前言: 本文介绍了饿了么交付中心由 Python 语言栈转换到 Java 语言栈大致过程,一来是对前段时间的工作做下总结,另外也是想通过此次总结为其他应用 ...

  3. c语言栈训练题目:括号匹配

    c语言栈训练题目:括号匹配 基本思路: 当前字符不是括号,不做处理: 当前字符是左括号,则进栈: 当前字符是右括号:若栈空,则表明该"右括号"多余,不匹 配,结束:否则和栈顶元素比 ...

  4. C语言栈的用法(创建、入栈、出栈、遍历)

    C语言栈的用法(创建.入栈.出栈.遍历) 本篇博客主要简单介绍如何使用C语言构建栈,元素入栈,元素出栈以及遍历所有的栈内元素 1.栈的定义 首先对栈进行定义,构建一个简单的结构体,采用typedef ...

  5. c语言怎样计算栈的长度,C语言 栈的表示和实现详细介绍

    C语言 栈的表示和实现详细介绍 定义:栈是限定仅在表尾进行插入和删除操作的线性表. 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入 ...

  6. python中动态语言静态语言的定义_作为程序开发,你所需要知道的编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的概念以及区别...

    作为程序开发,你所需要知道的编译型与解释型.动态语言与静态语言.强类型语言与弱类型语言的概念以及区别! 在各式各样的开发过程当中,我相信各位开发小伙伴在开发过程中并没有太关注什么是解释性语言和编译性语 ...

  7. c语言中#39;xd#39;代表什么,关于C语言宏定义的技巧:#39;##39;和#39;###39;

    关于C语言宏定义的技巧:'#'和'##' '#'和'##' '#'和'##'是两个预处理运算符,只能在预处理的过程中使用.在带参数的宏定义中, '#'运算符后面应该跟一个参数,预处理器会把这个参数转换 ...

  8. 【计算理论】正则语言 ( 正则表达式原子定义 | 正则表达式递归定义 | 正则表达式语言原子定义 | 正则表达式语言结构归纳 | 正则表达式语言示例 | 根据正则表达式构造自动机 )

    文章目录 一.正则表达式 定义 二. 正则表达式语言 原子定义 三.正则表达式语言 结构归纳定义 四.正则表达式语言 示例 五.空集 ∅\varnothing∅ 与 空字符 ε\varepsilonε ...

  9. 转载--c语言宏定义(1)

    作者:独舞风 链接:c语言宏定义(1) 1.为什么要有宏定义? 代码中某个特定数值需要参与运算,而且该数值作用于多个地方,当需要对该数值进行修改时,希望只改动一个地方就能实现该数值的全部更新:即便某个 ...

最新文章

  1. 【操作系统】Classical Problems of Synchronization-信号量机制
  2. 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
  3. 静态反调试技术(3)
  4. 发展农业对话国际农民丰收节贸易会 菲律宾学中国还是印度?
  5. jQuery对HTML进行添加元素
  6. PHP Cookie处理
  7. [Codevs] 1004 四子连棋
  8. 单片机拼字程序怎么做_餐饮怎么用微信小程序?餐饮行业怎么做小程序
  9. 发那科机器人编程软件fanuc roboguide授权补丁_发那科Robot | Line Tracking功能
  10. sqlplus可以连接plsql连接不上_Gee引擎配置微端不更新,连接不上,尝试重新连接的解决方法...
  11. Professional C# 6 and .NET Core 1.0 - Chapter 43 WebHooks and SignalR
  12. 简述UTF-8编码原理及其文本文件的读写技术 【转】
  13. qt unicode转gbk_Qt中文编码和QString类Unicode编码转换
  14. 用ftp上传服务器文件大小,ftp服务器上传文件大小
  15. 黑马程序员_源自梦想 GUI
  16. 推荐计划常见问题解答:有哪些问题是必须的?
  17. Structure of Heap
  18. Dungeon Master(poj2251,bfs)
  19. Flutter 时间选择器
  20. 基因数据处理44之cloud-scale-bwamem安装

热门文章

  1. groovy环境搭建,配置报错
  2. 密钥短语密码加密,解密同理。
  3. 前台获取信息进行跳转
  4. 西塘游(2007-08-14)
  5. 宜家邮件系统正遭网络攻击
  6. 详细分析 Sonlogger 任意文件上传漏洞 (CVE-2021-27964)
  7. 蚂蚁金服开源服务注册中心 SOFARegistry
  8. Transformer原理解析——一种Open AI和DeepMind都在用的神经网络架构
  9. H5实例教学--ThreeJs 实现粒子动画飘花效果
  10. 反射在微信公众平台开发的应用