文档章节

自定义堆栈Stack

michaelpan
 michaelpan
发布于 2014/08/18 17:38
字数 183
阅读 340
收藏 4

学习GO中自定义类型的定义,接口和方法的写法

测试用例: https://github.com/panyingyun/gostudy/blob/master/testStack.go

package main

import (
	"fmt"
	"github.com/panyingyun/gostudy/stacker"
)

func main() {
	a := stacker.NewStack(2)
	a.Push("Google")
	a.Push(100)
	a.Push([]int{1, 2, 3})
	fmt.Println(a)
	fmt.Println(a.Len())
	fmt.Println(a.Cap())
	for {
		item, err := a.Pop()
		if err != nil {
			fmt.Println(err)
			break
		}
		fmt.Println(item)
	}
}

stack定义: https://github.com/panyingyun/gostudy/blob/master/stacker/stack.go

package stacker

import (
	"errors"
)

type Stack struct {
	st  []interface{}
	len int
	cap int
}

func NewStack(cap int) *Stack {
	st := make([]interface{}, 0, cap)
	return &Stack{st, 0, cap}
}

func (s *Stack) Len() int {
	return s.len
}

func (s *Stack) Cap() int {
	return s.cap
}

func (s *Stack) Push(p interface{}) {
	s.st = append(s.st, p)
	s.len = len(s.st)
	s.cap = cap(s.st)
}

func (s *Stack) Pop() (interface{}, error) {
	if s.len == 0 {
		return nil, errors.New("Can't pop an empty stack")
	}
	s.len -= 1
	out := s.st[s.len]
	s.st = s.st[:s.len]
	return out, nil
}

© 著作权归作者所有

共有 人打赏支持
michaelpan
粉丝 4
博文 33
码字总数 9970
作品 0
杭州
高级程序员
私信 提问
堆栈以及接口在一个程序中的使用

/* * 功能描述: 堆栈的使用 * 作 者: 郭强生 * 修改日期: 2012-08-08 * 备 注: 堆栈以及接口在一个程序中的使用 / using System; using System.Collections.Generic; using System.Text;...

郭强生
2012/08/08
0
0
JavaScript 错误处理和堆栈追踪浅析

有时我们会忽略错误处理和堆栈追踪的一些细节, 但是这些细节对于写与测试或错误处理相关的库来说是非常有用的. 例如这周, 对于 Chai 就有一个非常棒的PR, 该PR极大地改善了我们处理堆栈的方式...

Lunaqi
2017/12/04
0
0
Java提高篇(三一)—–Stack

在Java中Stack类表示后进先出(LIFO)的对象堆栈。栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的。每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stac...

6pker
2016/10/24
55
0
Struts2拦截器的使用 (详解)

如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的che...

Idiot_s_Sky
2014/02/05
0
0
看看java.util.Stack源Java 9

在我们的数据结构的学习中,栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除...

woshixin
2018/08/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
22分钟前
1
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
46分钟前
0
0
JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
今天
6
0
OpenML

https://www.openml.org/search?type=data

shengjuntu
今天
2
0
java强引用,软引用,弱引用和虚引用

先来简要说一下这四种引用的特性: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它 弱引用:在垃圾...

woshixin
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部