golang数据结构和算法之StackLinkedList链表堆栈
会了上一个,这个就差不离了。
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链表堆栈的更多相关文章
- golang数据结构和算法之StackArray数组堆栈
用数组实现的堆栈, 另一种,是用链表实现的堆栈, 在各种不同的编程语言上, 实现都是类似的. StackArray.go package StackArray //基于数组实现的堆栈 const ar ...
- golang数据结构和算法之QueueLinkedList链表队列
队列和堆栈不一样的地方在于进出顺序: 堆栈是后进先出, 队列是先进先出. QueueLinkedList.go package QueueLinkedList type Node struct { d ...
- golang数据结构和算法之LinkedList链表
差不多自己看懂了,可以自己写测试了.:) LinkedList.go package LinkedList //"fmt" type Node struct { data int ...
- golang数据结构和算法之BinarySearch二分查找法
基础语法差不多了, 就需要系统的撸一下数据结构和算法了. 没找到合适的书, 就参考github项目: https://github.com/floyernick/Data-Structures-and ...
- JS数据结构及算法(一) 堆栈
最近在看<学习JavaScript数据结构与算法>这本书,感觉自己又涨知识了 哈哈... 现在将自己看的做个总结,也是巩固理解. 栈:先进后出,新添加和待删除的元素都保存在栈顶.可以用数组 ...
- Android版数据结构与算法(三):基于链表的实现LinkedList源码彻底分析
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. LinkedList 是一个双向链表.它可以被当作堆栈.队列或双端队列进行操作.LinkedList相对于ArrayList来说,添加,删除元素效 ...
- java数据结构和算法04(链表)
前面我们看了数组,栈和队列,大概就会这些数据结构有了一些基本的认识,首先回顾一下之前的东西: 在数组中,其实是分为有序数组和无序数组,我简单实现了无序数组,为什么呢?因为有序数组的实现就是将无序数组进 ...
- 数据结构与算法(c++)——反转链表
算法概述:要求实现将一条单向链表反转并考虑时间复杂度. 算法分析: 数组法(略): 将列表元素逐个保存进数组,之后再逆向重建列表 点评:实现逻辑最简单,需要额外的内存开销. 移动指针: 通过三个指针逐 ...
- 数据结构与算法JavaScript描述——链表
1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
随机推荐
- ORA-39901 EXPDP分区报错/分区表删除不完全
[oracle@localhost zgy]$ expdp orders/orders directory=DUMPDIR DUMPFILE=test_exp.dmp TRANSPORT_TABLES ...
- Linux数据库的创建 导入导出 以及一些基本指令
首先linux 下查看mysql相关目录 查看 mysql 的安装路径 执行查询 SQL mysql>show variables like '%dir%'; datadir 就是数据路径 确定 ...
- Tcp连接和断开
三次握手:客户端为a,服务端为b:开始都是closed状态:a主动打开进入到syn_sent状态,b被动打开进入listen状态:第一次握手,a向b发送SYN=1,seq为x的包,b收到以后进入syn ...
- (入门SpringBoot)SpringBoot加接口操作日志好方法(九)
用Spring的切面去做,慕课网上的大神的小妙招,被我拷贝下来了.import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotati ...
- Python入门基础学习(面向对象)
Python基础学习笔记(四) 面向对象的三个基本特征: 封装:把客观事物抽象并封装成对象,即将属性,方法和事件等集合在一个整体内 继承:允许使用现有类的功能并在无须重新改写原来的类情况下,对这些功能 ...
- div里面的元素在【垂直 方向】上水平分布 使用calc()函数动态计算
1==>如何让div里面的元素在[垂直 方向]上水平分布.important-dec{ height: 121px; //必须固定高度 flex-direction: column; //垂直排 ...
- alipay sign error
阴影部分地址参数有问题: <PAY_COMPLETE_PAGE_URL><![CDATA[https://baoxian.itaiping.com/ae-console/remote ...
- SpringBootTest MockMVC绑定session(需要登陆的接口)
https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testing spring-te ...
- python有哪些优点跟缺点
显著的优点 1. 语言简洁优美,Java能实现的python都能实现(除安卓开发),python能实现的Java不一定能实现如(自动化运维,爬虫) 2. 跨平台,window, linux,mac通用 ...
- Note | 常用指令,工具,教程和经验笔记
目录 图像处理 机器学习和数学 编程环境和工具 写作工具 其他 图像处理 获取图像频域并分解为高低频:https://www.cnblogs.com/RyanXing/p/11630493.html ...