用数组实现的堆栈,

另一种,是用链表实现的堆栈,

在各种不同的编程语言上,

实现都是类似的。

StackArray.go
package StackArray

//基于数组实现的堆栈
const arraySize = 10

type Stack struct {
	top  int
	data [arraySize]int
}

func (s *Stack) Push(i int) bool {
	if s.top == len(s.data) {
		return false
	}
	s.data[s.top] = i
	s.top += 1
	return true
}

func (s *Stack) Pop() (int, bool) {
	if s.top == 0 {
		return 0, false
	}

	i := s.data[s.top-1]
	s.top -= 1
	return i, true
}

func (s *Stack) Peek() int {
	return s.data[s.top-1]
}

func (s *Stack) get() []int {
	return s.data[:s.top]
}

func (s *Stack) IsEmpty() bool {
	return s.top == 0
}

func (s *Stack) Empty() {
	s.top = 0
}

  

StackArray_test.go
package StackArray

import (
	"fmt"
	"math/rand"
	"testing"
	"time"
)

func TestStackArray(t *testing.T) {
	//array := [...]int{0,0,0,0,0,0,0,0,0,0}
	var array [arraySize]int

	stackArray := &Stack{
		top:  0,
		data: array,
	}
	fmt.Println(stackArray.top, stackArray.data)

	random := rand.New(rand.NewSource(time.Now().UnixNano()))
	randNumber := random.Intn(100)
	stackArray.Push(randNumber)
	stackArray.Push(random.Intn(100))
	stackArray.Push(random.Intn(100))
	stackArray.Push(random.Intn(100))
	fmt.Println(stackArray.top, stackArray.data)
	retResult, retBool := stackArray.Pop()
	if retBool == true {
		fmt.Println(retResult)
	}
	stackArray.Empty()

	if stackArray.IsEmpty() == false {
		t.Fail()
	}

}

  

输出:
D:/Go/bin/go.exe test -v [D:/go-project/src/StackArray]
=== RUN   TestStackArray
0 [0 0 0 0 0 0 0 0 0 0]
4 [26 2 96 90 0 0 0 0 0 0]
90
--- PASS: TestStackArray (0.00s)
PASS
ok  	StackArray	2.043s
成功: 进程退出代码 0.

  

golang数据结构和算法之StackArray数组堆栈的更多相关文章

  1. golang数据结构和算法之StackLinkedList链表堆栈

    会了上一个,这个就差不离了. StackLinkedList.go package StackLinkedList type Node struct { data int next *Node } t ...

  2. java数据结构和算法01(数组的简单使用)

    一直都对这一块没有什么想法,加上不怎么理解,只是懂个大概:最近突然感觉对数据结构和算法这块有点儿兴趣,决定还是尽量详细的看看这些结构和算法: 话说什么事数据结构和算法呢?现在我也说不上来,等我学的差不 ...

  3. JS数据结构及算法(一) 堆栈

    最近在看<学习JavaScript数据结构与算法>这本书,感觉自己又涨知识了 哈哈... 现在将自己看的做个总结,也是巩固理解. 栈:先进后出,新添加和待删除的元素都保存在栈顶.可以用数组 ...

  4. golang数据结构和算法之BinarySearch二分查找法

    基础语法差不多了, 就需要系统的撸一下数据结构和算法了. 没找到合适的书, 就参考github项目: https://github.com/floyernick/Data-Structures-and ...

  5. Java成神之路:第二帖---- 数据结构与算法之稀疏数组

    数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...

  6. java版数据结构与算法第二章数组

    数组由一组具有相同类型的数据元素组成,并存储在一组连续存储单元中.一维数组是常量. 二维数组:若一维数组中的数据元素又是一堆数据结构,我们称之为二维数组.二维数组可以看成是n个列向量组成的线性表. 数 ...

  7. javascript数据结构和算法 第二章 (数组) 二

    字符串表示的数组 join() 和 toString() 函数返回数组的字符串表示.这两个函数通过将数组中的元素用逗号分隔符切割,返回字符串数组表示. 这里有个样例: var names = [&qu ...

  8. Android版数据结构与算法(二):基于数组的实现ArrayList源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本片我们分析基础数组的实现--ArrayList,不会分析整个集合的继承体系,这不是本系列文章重点. 源码分析都是基于"安卓版" ...

  9. 数据结构与算法之有序数组(2)——in dart

    本文比第一篇,采用了类实现.增加了运算符重载等功能.本来有序数组是不能修改某个位置的值的,因为这样会打破数组的有序性:但为了演示,保留了修改的方法,但为此增加了排序. import 'dart:mat ...

随机推荐

  1. Consul作为配置中心,配置Asp.Net Core应用程序

    前言 最近项目逐步转向基于.Net Core,目前dotnet core 虽然已出3.0了但还没有特别成熟的框架,要实现微服务,必须要解决配置中心的问题 .不管是不是微服务,节点多了配置文件一个个更改 ...

  2. 原型链 | 显示原型、隐式原型 | 构造关系constructor | instanceof

    1.原型关系 prototype 显式原型:prototype 隐式原型:__proto__ 1. 每个函数function都有一个prototype,即显式原型(属性)2. 每个实例对象都有一个__ ...

  3. Tomcat 设置JVM内存大小

    我的服务器的配置: # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...

  4. 【STM32H7教程】第18章 STM32H7的GPIO应用之跑马灯

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第18章       STM32H7的GPIO应用之跑马灯 本 ...

  5. 反射2-spring boot jpa 注入model即实现查询

    spring boot jpa 使用方法:将对应的model类注入即可// fixed parameter type private Specification<TargetModel> ...

  6. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1

    现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用My ...

  7. 【Linux命令】系统状态检测命令8个(ifconfig、uname、uptime、free、who、last、history、sosreport)

    目录 ifconfig获取网卡配置信息 uname查看系统内核版本 uptime查看系统的负载信息 free查看内存信息 who查看当前主机用户的终端信息 last查看系统的登录记录 history查 ...

  8. PriorityBlockingQueue

    public class PriorityBlockingQueueTest { /** * 有优先级顺序的阻塞队列,底层实现是数组,无边界.默认是11. * 构造方法可以传入一个比较器,不传的话,默 ...

  9. VS2019 MSB364 未找到框架“NETFramework,Version=v4.7”

    环境: WIN 10 VS2019 已安装框架v4.7.2 问题: 在打开一些早期项目时,编译报 MSB364 错误,未找到框架“NETFramework,Version=v4.7”或未找到框架“NE ...

  10. 用户和登录的ID、Name和SID

    SQL Server的安全主体主要分为Login.User和Role,不仅有ID属性,还有Name属性和SID属性,SID是指Security ID.在查看用户和登录的时候,受到模拟上下文的影响.当执 ...