From 5a7b3c4a372c63ced5dea991d9aaa04cdc14e051 Mon Sep 17 00:00:00 2001 From: dudaodong Date: Fri, 3 Jun 2022 19:20:14 +0800 Subject: [PATCH] docs: add stack_zh-CN.md doc --- docs/datastructure/stack_zh-CN.md | 611 ++++++++++++++++++++++++++++++ 1 file changed, 611 insertions(+) create mode 100644 docs/datastructure/stack_zh-CN.md diff --git a/docs/datastructure/stack_zh-CN.md b/docs/datastructure/stack_zh-CN.md new file mode 100644 index 0000000..acdd762 --- /dev/null +++ b/docs/datastructure/stack_zh-CN.md @@ -0,0 +1,611 @@ +# Stack +栈数据结构,包括ArrayStack(数组栈)和LinkedStack(链表栈)。 + +
+ +## 源码 + +- [https://github.com/duke-git/lancet/blob/main/datastructure/stack/arraystack.go](https://github.com/duke-git/lancet/blob/main/datastructure/stack/arraystack.go) +- [https://github.com/duke-git/lancet/blob/main/datastructure/stack/linkedstack.go](https://github.com/duke-git/lancet/blob/main/datastructure/stack/linkedstack.go) + + +
+ +## 用法 +```go +import ( + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) +``` + +
+ +## 目录 + +### 1. ArrayStack(数组栈) + +- [NewArrayStack](#NewArrayStack) +- [Push](#ArrayStack_Push) +- [Pop](#ArrayStack_Pop) +- [Peak](#ArrayStack_Peak) +- [Data](#ArrayStack_Data) +- [Size](#ArrayStack_Size) +- [IsEmpty](#ArrayStack_IsEmpty) +- [Clear](#ArrayStack_Clear) + +### 2. LinkedStack(链表栈) + +- [NewLinkedStack](#NewLinkedStack) +- [Push](#LinkedStack_Push) +- [Pop](#LinkedStack_Pop) +- [Peak](#LinkedStack_Peak) +- [Data](#LinkedStack_Data) +- [Size](#LinkedStack_Size) +- [IsEmpty](#LinkedStack_IsEmpty) +- [Clear](#LinkedStack_Clear) +- [Print](#LinkedStack_Print) + +
+ +## 文档 + +### 1. ArrayStack +用切片实现栈结构 + +### NewArrayStack +

返回ArrayStack指针实例

+ +函数签名: + +```go +type ArrayStack[T any] struct { + data []T + length int +} +func NewArrayStack[T any]() *ArrayStack[T] +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + fmt.Println(sk) +} +``` + + + + +### Push +

将元素加入数组栈

+ +函数签名: + +```go +func (s *ArrayStack[T]) Push(value T) +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.Data()) //[]int{3, 2, 1} +} +``` + + + + +### Pop +

删除栈顶元素并返回该元素指针

+ +函数签名: + +```go +func (s *ArrayStack[T]) Pop() (*T, error) +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + val, err := sk.Pop() + fmt.Println(err) //nil + fmt.Println(*val) //3 + + fmt.Println(sk.Data()) //[]int{2, 1} +} +``` + + + + +### Peak +

返回栈顶元素指针

+ +函数签名: + +```go +func (s *ArrayStack[T]) Peak() (*T, error) +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + val, err := sk.Peak() + fmt.Println(err) //nil + fmt.Println(*val) //3 + + fmt.Println(sk.Data()) //[]int{3, 2, 1} +} +``` + + + + +### Data +

返回栈中所有元素组成的切片

+ +函数签名: + +```go +func (s *ArrayStack[T]) Data() []T +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.Data()) //[]int{3, 2, 1} +} +``` + + + + +### Size +

返回栈中元素的数量

+ +函数签名: + +```go +func (s *ArrayStack[T]) Size() int +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.Size()) //3 +} +``` + + + + +### IsEmpty +

判断栈是否为空

+ +函数签名: + +```go +func (s *ArrayStack[T]) IsEmpty() bool +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + fmt.Println(sk.IsEmpty()) //true + + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.IsEmpty()) //false +} +``` + + + + +### Clear +

清空栈元素,使栈为空

+ +函数签名: + +```go +func (s *ArrayStack[T]) Clear() +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewArrayStack[int]() + + sk.Push(1) + sk.Push(2) + sk.Push(3) + + sk.Clear() + + fmt.Println(sk.Data()) //[]int{} +} +``` + + + +### 2. LinkedStack +链表实现的栈结构。 + +### NewLinkedStack +

返回LinkedStack指针实例

+ +函数签名: + +```go +type StackNode[T any] struct { + Value T + Next *StackNode[T] +} +type LinkedStack[T any] struct { + top *datastructure.StackNode[T] + length int +} +func NewLinkedStack[T any]() *LinkedStack[T] +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + fmt.Println(sk) +} +``` + + + + +### Push +

将元素加入链表栈

+ +函数签名: + +```go +func (s *LinkedStack[T]) Push(value T) +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.Data()) //[]int{3, 2, 1} +} +``` + + + + +### Pop +

删除栈顶元素并返回该元素指针

+ +函数签名: + +```go +func (s *LinkedStack[T]) Pop() (*T, error) +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + val, err := sk.Pop() + fmt.Println(err) //nil + fmt.Println(*val) //3 + + fmt.Println(sk.Data()) //[]int{2, 1} +} +``` + + + + +### Peak +

返回栈顶元素指针

+ +函数签名: + +```go +func (s *LinkedStack[T]) Peak() (*T, error) +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + val, err := sk.Peak() + fmt.Println(err) //nil + fmt.Println(*val) //3 + + fmt.Println(sk.Data()) //[]int{3, 2, 1} +} +``` + + + + +### Data +

返回栈中所有元素组成的切片

+ +函数签名: + +```go +func (s *LinkedStack[T]) Data() []T +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.Data()) //[]int{3, 2, 1} +} +``` + + + + +### Size +

返回栈中元素的数量

+ +函数签名: + +```go +func (s *LinkedStack[T]) Size() int +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.Size()) //3 +} +``` + + + + +### IsEmpty +

判断栈是否为空

+ +函数签名: + +```go +func (s *LinkedStack[T]) IsEmpty() bool +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + fmt.Println(sk.IsEmpty()) //true + + sk.Push(1) + sk.Push(2) + sk.Push(3) + + fmt.Println(sk.IsEmpty()) //false +} +``` + + + + +### Clear +

清空栈元素,使栈为空

+ +函数签名: + +```go +func (s *LinkedStack[T]) Clear() +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + + sk.Push(1) + sk.Push(2) + sk.Push(3) + + sk.Clear() + + fmt.Println(sk.Data()) //[]int{} +} +``` + + + + +### Print +

打印链表栈结构

+ +函数签名: + +```go +func (s *LinkedStack[T]) Print() +``` +例子: + +```go +package main + +import ( + "fmt" + stack "github.com/duke-git/lancet/v2/datastructure/stack" +) + +func main() { + sk := stack.NewLinkedStack[int]() + + sk.Push(1) + sk.Push(2) + sk.Push(3) + + + sk.Print() //[ &{Value:3 Next:0xc000010260}, &{Value:2 Next:0xc000010250}, &{Value:1 Next:}, ] +} +```