package
1.2.2
Repository: https://github.com/min1324/data.git
Documentation: pkg.go.dev

# README

Stack


栈(stack)是非常常用的先进后出(FILO)数据结构,它只允许在队列的前端进行入栈出栈(Push,Pop)操作,lock-freestack 算法都是通过CAS操作实现的。

使用 Go 实现算法,队列包有以下几种队列:

  1. 单锁链表,切片栈。
  2. 无锁链表,切片栈。
struct名说明使用场景
SAStack单锁切片,有界限,默认:DefaultSize。简单并发不高,能预测多少的情况。栈内元素保持很少或在空。
SLStack单锁链表,无界限。简单并发不高,无法预测栈内元素有多少的情况。
LLStack无锁链表,无界限,默认:DefaultSize。高频读写,无法预测栈内元素多少的情况。
LAStack无锁切片,有界限,默认:DefaultSize。连续读,连续写很多的场景。

总体性能大概:LL>LA>SL>SA

Stack接口:

type Stack interface {
	Push(i interface{}) bool
	Pop() (val interface{}, ok bool)
}

Push:

将val加入栈顶,返回是否成功。

Pop:

取出栈顶val,返回val和是否成功,如果不成功,val为nil。