golang数据结构和算法之StackArray数组堆栈
用数组实现的堆栈,
另一种,是用链表实现的堆栈,
在各种不同的编程语言上,
实现都是类似的。
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数组堆栈的更多相关文章
- golang数据结构和算法之StackLinkedList链表堆栈
会了上一个,这个就差不离了. StackLinkedList.go package StackLinkedList type Node struct { data int next *Node } t ...
- java数据结构和算法01(数组的简单使用)
一直都对这一块没有什么想法,加上不怎么理解,只是懂个大概:最近突然感觉对数据结构和算法这块有点儿兴趣,决定还是尽量详细的看看这些结构和算法: 话说什么事数据结构和算法呢?现在我也说不上来,等我学的差不 ...
- JS数据结构及算法(一) 堆栈
最近在看<学习JavaScript数据结构与算法>这本书,感觉自己又涨知识了 哈哈... 现在将自己看的做个总结,也是巩固理解. 栈:先进后出,新添加和待删除的元素都保存在栈顶.可以用数组 ...
- golang数据结构和算法之BinarySearch二分查找法
基础语法差不多了, 就需要系统的撸一下数据结构和算法了. 没找到合适的书, 就参考github项目: https://github.com/floyernick/Data-Structures-and ...
- Java成神之路:第二帖---- 数据结构与算法之稀疏数组
数据结构与算法--稀疏数组 转换方法 记录数组有几行几列,有多少个不同的值 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模 如图: 二维数组转稀疏数组 对原始的二维数组进行遍历 ...
- java版数据结构与算法第二章数组
数组由一组具有相同类型的数据元素组成,并存储在一组连续存储单元中.一维数组是常量. 二维数组:若一维数组中的数据元素又是一堆数据结构,我们称之为二维数组.二维数组可以看成是n个列向量组成的线性表. 数 ...
- javascript数据结构和算法 第二章 (数组) 二
字符串表示的数组 join() 和 toString() 函数返回数组的字符串表示.这两个函数通过将数组中的元素用逗号分隔符切割,返回字符串数组表示. 这里有个样例: var names = [&qu ...
- Android版数据结构与算法(二):基于数组的实现ArrayList源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本片我们分析基础数组的实现--ArrayList,不会分析整个集合的继承体系,这不是本系列文章重点. 源码分析都是基于"安卓版" ...
- 数据结构与算法之有序数组(2)——in dart
本文比第一篇,采用了类实现.增加了运算符重载等功能.本来有序数组是不能修改某个位置的值的,因为这样会打破数组的有序性:但为了演示,保留了修改的方法,但为此增加了排序. import 'dart:mat ...
随机推荐
- Zookeeper学习(一)
shell角度 API角度 Zookeeper可单节点,可分布式 作用: distributed coordination(分布式协调) 同一时间只有一个对外提供服务,另外的就是standy. 当ac ...
- python连数据库制作音乐软件
import pymysql conn = pymysql.connect(host="localhost",user="root",password=&quo ...
- Linux:DHCP服务器的搭建
了解DHCP协议工作原理 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)提供了动态配置IP地址的功能.在DHCP网络中,客户端不再需要自行输入网络 ...
- [PHP] 循环查看php-fpm的内存占用情况
在webmail的业务中进行发信,如果携带了附件,会把附件拼接内嵌到邮件正文里,这时会极大的占用内存,可以使用以下命令查看fpm的进程内存占用 ps --no-headers --sort -rss ...
- 渗透测试学习 二十九、kali安装,信息搜集,服务器扫描
kali安装,信息搜集,服务器扫描 kali介绍 Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统.由Offensive Security Ltd维护和资助.最先由 ...
- LInux:网络连接的设置
主机名的配置 主机名的配置(配置文件/etc/hostname) 1.使用 hostname 命令临时设置主机名 命令格式:hostname [新主机名] 2.永久设置主机名 命令格式:hostnam ...
- leetcode 双周赛9 找出所有行中最小公共元素
给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了.请你帮忙找出在所有这些行中 最小的公共元素. 如果矩阵中没有这样的公共元素,就请返回 -1. 示例: 输入:mat = [[,,,,] ...
- Codeforces Round #594 (Div. 2) B. Grow The Tree 水题
B. Grow The Tree Gardener Alexey teaches competitive programming to high school students. To congrat ...
- mysql--事务详解
事务的四大特性: # 原子性(atomicity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 ...
- oracle学习笔记(十八) PL/SQL 游标
游标 说明 查询结果的光标,相当于java中的一个迭代器,方便遍历操作 可使用的属性 %FOUND SQL语句查询或影响了一行或多行时为 TRUE.如:mycursor%FOUND %NOTFOUND ...