// stack 栈
package Algorithm import (
"errors"
"reflect"
) // 栈定义
type Stack struct {
values []interface{}
valueType reflect.Type
} // 构造栈
func NewStack(valueType reflect.Type) *Stack {
return &Stack{values: make([]interface{}, ), 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) == {
return nil, errors.New("stack empty")
}
v := stack.values[len(stack.values)-]
stack.values = stack.values[:len(stack.values)-]
return v, nil
} // 获取栈顶元素
func (stack *Stack) Top() (interface{}, error) {
if stack == nil || len(stack.values) == {
return nil, errors.New("stack empty")
}
return stack.values[len(stack.values)-], nil
} // 获取栈内元素个数
func (stack *Stack) Len() int {
return len(stack.values)
} // 判断栈是否为空
func (stack *Stack) Empty() bool {
if stack == nil || len(stack.values) == {
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语言栈的实现

    有始有终,所以我准备把各种数据结构都讲一次,栈也分顺序存储和链式储存,这里我们选择链式存储来讲,顺序存储没有难度(链式其实也是) 作为数据结构中最简单的栈,这里不会说太多,首先考虑一下下面的model ...

  2. 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

    阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...

  3. 小心C语言的定义与声明

    小心C语言的定义与声明 转自360博客 注:为便于说明问题,文中提及的变量和函数都被简化. 一.起源 DBProxy在测试过程中,发现对其执行某步管理操作后,程序有时会崩溃,但不是每次都出现. 二.G ...

  4. C语言栈与调用惯例

    C语言栈与调用惯例 1.前言 最近在再看<程序员的自我修养>这本书,对程序的链接.装载与库有了更深入的认识.关于这本书的评价可以去豆瓣看看http://book.douban.com/su ...

  5. C 语言宏定义

    C 语言宏定义1.例子如下: #define PRINT_STR(s) printf("%s",s.c_str()) string str = "abcd"; ...

  6. 将C语言宏定义数值转换成字符串!

    将C语言宏定义转换成字符串! 摘自:https://blog.csdn.net/happen23/article/details/50602667 2016年01月28日 19:15:47 六个九十度 ...

  7. MOOC 编译原理笔记(一):编译原理概述以及程序设计语言的定义

    编译原理概述 什么是编译程序 编译程序指:把某一种高级语言程序等价地转换成另一张低级语言程序(如汇编语言或机器代码)的程序. 高级语言程序-翻译->机器语言程序-运行->结果. 其中编译程 ...

  8. C语言 宏定义之可变参数

    可变参数宏定义 C99编译器标准允许你可以定义可变参数宏(variadic macros),这样你就可以使用拥有可以变化的参数表的宏.可变参数宏就像下面这个样子: #define dbgprint(. ...

  9. C语言栈调用机制初探

    学习linux离不开c语言,也离不开汇编,二者之间的相互调用在源代码中几乎随处可见.所以必须清楚地理解c语言背后的汇编结果才能更好地读懂linux中相关的代码.否则会有很多疑惑,比如在head.s中会 ...

随机推荐

  1. HDU5470 Typewriter SAM 动态规划 单调队列

    原文链接https://www.cnblogs.com/zhouzhendong/p/HDU5470.html 题目传送门 - HDU5470 题意 你需要写一个只包含小写字母的字符串 $s$ . 你 ...

  2. 学习Spring必须了解的基础知识——回调机制

    上面这张图如果能看得懂就能理解什么是回调机制: A对象在调用a()方法时会调用B对象的b()方法,b()方法必须能调用A对象的callback()方法. 谁白了:a()方法有B对象b()方法的引用,b ...

  3. Ubuntu18.04上安装Docker CE

    建立 REPOSITORY 1.更新索引包 更新 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的地址,这样才能获取到最新的软件包 sudo ...

  4. 016 pickle

    英文也是泡菜的意思. 学完了,还是感觉这个模块是蛮不错的,对多数据保存到文件中,然后在使用的时候,再读取出来,让程序闲的更加优雅,简洁. 一:介绍 1.为什么使用 在开篇已经介绍了,但是我这里粘贴一下 ...

  5. centos7如何添加开机启动服务/脚本

    一.添加开机自启服务 在centos7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins.service #设置jenkins服务为 ...

  6. [洛谷P1886]滑动窗口 (单调队列)(线段树)

    ---恢复内容开始--- 这是很好的一道题 题目描述: 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口. 现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的 ...

  7. react+typescript报错集锦<持续更新>

    typescript报错集锦 错误:Import sources within a group must be alphabetized.tslint(ordered-imports) 原因:impo ...

  8. 基于TFTP方式加载启动Linux内核

            一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E63 ...

  9. C# 简单学习正则表达式

    第一步先要引入有关正则式的命名空间: using System.Text.RegularExpressions;            第二步用指定的正则式构建一个正则表达式对象,下面的正则式是用来搜 ...

  10. 详解Spring中的ApplicationListener和ContextRefreshedEvent

    ApplicationListener和ContextRefreshedEvent一般都是成对出现的.最近在面试中问到了被面试者对于这两个的用法,面试者大多数被问懵了.可见基础知识的掌握程度.基于此本 ...