会了上一个,这个就差不离了。

StackLinkedList.go
package StackLinkedList

type Node struct {
	data int
	next *Node
}

type Stack struct {
	top *Node
}

func (list *Stack) Push(i int) {
	data := &Node{data: i}
	if list.top != nil {
		data.next = list.top
	}
	list.top = data
}

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

	i := list.top.data
	list.top = list.top.next
	return i, true
}

func (list *Stack) Peek() (int, bool) {
	if list.top == nil {
		return 0, false
	}
	return list.top.data, true
}

func (list *Stack) Get() [] int {
	var items[]int
	current := list.top
	for current != nil {
		items = append(items, current.data)
		current = current.next
	}
	return items
}

func (list *Stack) IsEmpty() bool {
	return list.top == nil
}

func (list *Stack) Empty() {
	list.top = nil
}

  

StackLinkedList_test.go
package StackLinkedList

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

func TestStackLinkedList(t *testing.T) {
	random := rand.New(rand.NewSource(time.Now().UnixNano()))
	headNode := &Node{
		data: random.Intn(100),
		next: nil,
	}
	stackLinkedList := &Stack{
		top: headNode,
	}
	fmt.Println(stackLinkedList.Get())

	randNumber := random.Intn(100)
	stackLinkedList.Push(randNumber)
	stackLinkedList.Push(random.Intn(100))
	stackLinkedList.Push(random.Intn(100))
	stackLinkedList.Push(random.Intn(100))
	fmt.Println(stackLinkedList.Get())
	retResult, retBool := stackLinkedList.Pop()
	if retBool == true {
		fmt.Println(retResult)
	}
	stackLinkedList.Empty()

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

}

  

输出:
D:/Go/bin/go.exe test -v [D:/go-project/src/StackLinkedList]
=== RUN   TestStackLinkedList
[84]
[34 74 26 11 84]
34
--- PASS: TestStackLinkedList (0.00s)
PASS
ok  	StackLinkedList	2.680s
成功: 进程退出代码 0.

  

golang数据结构和算法之StackLinkedList链表堆栈的更多相关文章

  1. golang数据结构和算法之StackArray数组堆栈

    用数组实现的堆栈, 另一种,是用链表实现的堆栈, 在各种不同的编程语言上, 实现都是类似的. StackArray.go package StackArray //基于数组实现的堆栈 const ar ...

  2. golang数据结构和算法之QueueLinkedList链表队列

    队列和堆栈不一样的地方在于进出顺序: 堆栈是后进先出, 队列是先进先出. QueueLinkedList.go package QueueLinkedList type Node struct { d ...

  3. golang数据结构和算法之LinkedList链表

    差不多自己看懂了,可以自己写测试了.:) LinkedList.go package LinkedList //"fmt" type Node struct { data int ...

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

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

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

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

  6. Android版数据结构与算法(三):基于链表的实现LinkedList源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. LinkedList 是一个双向链表.它可以被当作堆栈.队列或双端队列进行操作.LinkedList相对于ArrayList来说,添加,删除元素效 ...

  7. java数据结构和算法04(链表)

    前面我们看了数组,栈和队列,大概就会这些数据结构有了一些基本的认识,首先回顾一下之前的东西: 在数组中,其实是分为有序数组和无序数组,我简单实现了无序数组,为什么呢?因为有序数组的实现就是将无序数组进 ...

  8. 数据结构与算法(c++)——反转链表

    算法概述:要求实现将一条单向链表反转并考虑时间复杂度. 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向重建列表 点评:实现逻辑最简单,需要额外的内存开销. 移动指针: 通过三个指针逐 ...

  9. 数据结构与算法JavaScript描述——链表

    1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...

随机推荐

  1. 循环语句for基本概述

    循环语句for基本概述 01. for循环基础语法 for 变量名 in [ 取值列表 ]do 循环体done 02. for循环基本使用示例 #取值列表有多种取值方式,可以直接读取in后面的值,默认 ...

  2. mssql 系统函数 字符串函数 space 功能简介

    转自: http://www.maomao365.com/?p=4672  一.space 函数功能简介 space功能:返回指定数量的空格参数简介: 参数1: 指定数量,参数需为int类型 注意事项 ...

  3. 向busybox中添加自己的applet

    关键词:buysbox.applet等. busybox常用于嵌入式环境,集成中断Linux命令和工具.这些工具简单高效. 下面从如下方面了解: 这些命令是一个软链接到busybox,那么是如何从软连 ...

  4. HTML5应用 转 Android、Windows Phone 应用

    一.HTML5 转 Android 目标SDK:API 20 1.新建一个 Blank Activity 的应用 2.在 AndroidManifest.xml 文件中添加联网权限 <uses- ...

  5. SPA项目开发之动态树以及数据表格和分页

    首先我们来看下数据库 t_vue_user t_vue_tree_node t_vue_articles 2. 动态生成NavMenu导航菜单(只支持2级菜单) <el-menu key=&qu ...

  6. FormData的介绍(一)

    FormData对象介绍FormData字母意思是表单数据,H5新增的一个内置对象.可以获取任何类型的表单数据,如text radio checkbox file textarea 常用语发送ajax ...

  7. misc-3-1

    无后缀,用winhex发现是rar,添加后缀解压,依据是无后缀,丢到kali,是一个流量数据包 TCP追踪流在第五个数据包发现flag.rar 导出对象 选择HTTP 找到flag.rar 然后丢到你 ...

  8. MySQL Explain详解 查看mysql语句详情

    在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...

  9. os 和 sys 的模块使用方法和模块

    os  的模块  方法 os.remove()删除文件 os.rename()重命名文件 os.walk()生成目录树下的所有文件名 os.chdir()改变目录 os.mkdir/maked ...

  10. python-pandas读取mongodb、读取csv文件

    续上一篇博客(‘’selenium爬取NBA并将数据存储到MongoDB‘)https://www.cnblogs.com/lutt/p/10810581.html 本篇的内容是将存储到mongo的数 ...