mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-14 17:52:28 +08:00
doc: update doc for datastructure package
This commit is contained in:
28
README.md
28
README.md
@@ -394,16 +394,26 @@ import heap "github.com/duke-git/lancet/v2/datastructure/heap"
|
|||||||
import hashmap "github.com/duke-git/lancet/v2/datastructure/hashmap"
|
import hashmap "github.com/duke-git/lancet/v2/datastructure/hashmap"
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Function list:
|
#### Structure list:
|
||||||
|
|
||||||
|
- **<big>List</big>** : a linear table, implemented with slice.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/list.md)]
|
||||||
|
- **<big>Link</big>** : link list structure, contains singly link and doubly link.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/link.md)]
|
||||||
|
- **<big>Stack</big>** : stack structure(fifo), contains array stack and link stack.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/stack.md)]
|
||||||
|
- **<big>Queue</big>** : queue structure(filo), contains array queue, circular queue, link queue and priority queue.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/queue.md)]
|
||||||
|
- **<big>Set</big>** : a data container, like slice, but element of set is not duplicate.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/set.md)]
|
||||||
|
- **<big>Tree</big>** : binary search tree structure.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/tree.md)]
|
||||||
|
- **<big>Heap</big>** : a binary max heap.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/heap.md)]
|
||||||
|
- **<big>Hashmap</big>** : hash map structure.
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/hashmap.md)]
|
||||||
|
|
||||||
|
|
||||||
- [List](https://github.com/duke-git/lancet/blob/main/docs/datastructure/list.md)
|
|
||||||
- [Linklist](https://github.com/duke-git/lancet/blob/main/docs/datastructure/linklist.md)
|
|
||||||
- [Stack](https://github.com/duke-git/lancet/blob/main/docs/datastructure/stack.md)
|
|
||||||
- [Queue](https://github.com/duke-git/lancet/blob/main/docs/datastructure/queue.md)
|
|
||||||
- [Set](https://github.com/duke-git/lancet/blob/main/docs/datastructure/set.md)
|
|
||||||
- [Tree](https://github.com/duke-git/lancet/blob/main/docs/datastructure/tree.md)
|
|
||||||
- [Heap](https://github.com/duke-git/lancet/blob/main/docs/datastructure/heap.md)
|
|
||||||
- [HashMap](https://github.com/duke-git/lancet/blob/main/docs/datastructure/hashmap.md)
|
|
||||||
|
|
||||||
### 8. Fileutil package implements some basic functions for file operations.
|
### 8. Fileutil package implements some basic functions for file operations.
|
||||||
|
|
||||||
|
|||||||
@@ -395,14 +395,25 @@ import hashmap "github.com/duke-git/lancet/v2/datastructure/hashmap"
|
|||||||
|
|
||||||
#### Function list:
|
#### Function list:
|
||||||
|
|
||||||
- [List](https://github.com/duke-git/lancet/blob/main/docs/datastructure/list_zh-CN.md)
|
- **<big>List</big>** : 线性表结构, 用切片实现。
|
||||||
- [Linklist](https://github.com/duke-git/lancet/blob/main/docs/datastructure/linklist_zh-CN.md)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/list_zh-CN.md)]
|
||||||
- [Stack](https://github.com/duke-git/lancet/blob/main/docs/datastructure/stack_zh-CN.md)
|
- **<big>Link</big>** : 链表解构, 包括单链表和双向链表。
|
||||||
- [Queue](https://github.com/duke-git/lancet/blob/main/docs/datastructure/queue_zh-CN.md)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/link_zh-CN.md)]
|
||||||
- [Set](https://github.com/duke-git/lancet/blob/main/docs/datastructure/set_zh-CN.md)
|
- **<big>Stack</big>** : 栈结构(fifo), 包括数组栈和链表栈。
|
||||||
- [Tree](https://github.com/duke-git/lancet/blob/main/docs/datastructure/tree_zh-CN.md)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/stack_zh-CN.md)]
|
||||||
- [Heap](https://github.com/duke-git/lancet/blob/main/docs/datastructure/heap.md)
|
- **<big>Queue</big>** : 队列结构(filo), 包括数组队列,链表队列,循环队列,优先级队列。
|
||||||
- [HashMap](https://github.com/duke-git/lancet/blob/main/docs/datastructure/hashmap.md)
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/queue_zh-CN.md)]
|
||||||
|
- **<big>Set</big>** : 集合(set)结构。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/set_zh-CN.md)]
|
||||||
|
- **<big>Tree</big>** : 二叉搜索树。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/tree_zh-CN.md)]
|
||||||
|
- **<big>Heap</big>** : 二叉max堆。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/heap_zh-CN.md)]
|
||||||
|
- **<big>Hashmap</big>** : 哈希映射。
|
||||||
|
[[doc](https://github.com/duke-git/lancet/blob/main/docs/datastructure/hashmap_zh-CN.md)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 8. fileutil 包含文件基本操作。
|
### 8. fileutil 包含文件基本操作。
|
||||||
|
|
||||||
|
|||||||
@@ -8,17 +8,17 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
// List is a linear table, implemented with slice
|
// List is a linear table, implemented with slice.
|
||||||
type List[T any] struct {
|
type List[T any] struct {
|
||||||
data []T
|
data []T
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewList return a pointer of List
|
// NewList return a pointer of List.
|
||||||
func NewList[T any](data []T) *List[T] {
|
func NewList[T any](data []T) *List[T] {
|
||||||
return &List[T]{data: data}
|
return &List[T]{data: data}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Data return list data
|
// Data return list data.
|
||||||
func (l *List[T]) Data() []T {
|
func (l *List[T]) Data() []T {
|
||||||
return l.data
|
return l.data
|
||||||
}
|
}
|
||||||
@@ -31,7 +31,7 @@ func (l *List[T]) ValueOf(index int) (*T, bool) {
|
|||||||
return &l.data[index], true
|
return &l.data[index], true
|
||||||
}
|
}
|
||||||
|
|
||||||
// IndexOf returns the index of value. if not found return -1
|
// IndexOf returns the index of value. if not found return -1.
|
||||||
func (l *List[T]) IndexOf(value T) int {
|
func (l *List[T]) IndexOf(value T) int {
|
||||||
index := -1
|
index := -1
|
||||||
data := l.data
|
data := l.data
|
||||||
@@ -45,7 +45,7 @@ func (l *List[T]) IndexOf(value T) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// LastIndexOf returns the index of the last occurrence of the value in this list.
|
// LastIndexOf returns the index of the last occurrence of the value in this list.
|
||||||
// if not found return -1
|
// if not found return -1.
|
||||||
func (l *List[T]) LastIndexOf(value T) int {
|
func (l *List[T]) LastIndexOf(value T) int {
|
||||||
index := -1
|
index := -1
|
||||||
data := l.data
|
data := l.data
|
||||||
@@ -59,7 +59,7 @@ func (l *List[T]) LastIndexOf(value T) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IndexOfFunc returns the first index satisfying f(v)
|
// IndexOfFunc returns the first index satisfying f(v)
|
||||||
// if not found return -1
|
// if not found return -1.
|
||||||
func (l *List[T]) IndexOfFunc(f func(T) bool) int {
|
func (l *List[T]) IndexOfFunc(f func(T) bool) int {
|
||||||
index := -1
|
index := -1
|
||||||
data := l.data
|
data := l.data
|
||||||
@@ -73,7 +73,7 @@ func (l *List[T]) IndexOfFunc(f func(T) bool) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// LastIndexOfFunc returns the index of the last occurrence of the value in this list satisfying f(data[i])
|
// LastIndexOfFunc returns the index of the last occurrence of the value in this list satisfying f(data[i])
|
||||||
// if not found return -1
|
// if not found return -1.
|
||||||
func (l *List[T]) LastIndexOfFunc(f func(T) bool) int {
|
func (l *List[T]) LastIndexOfFunc(f func(T) bool) int {
|
||||||
index := -1
|
index := -1
|
||||||
data := l.data
|
data := l.data
|
||||||
@@ -86,7 +86,7 @@ func (l *List[T]) LastIndexOfFunc(f func(T) bool) int {
|
|||||||
return index
|
return index
|
||||||
}
|
}
|
||||||
|
|
||||||
// Contain checks if the value in the list or not
|
// Contain checks if the value in the list or not.
|
||||||
func (l *List[T]) Contain(value T) bool {
|
func (l *List[T]) Contain(value T) bool {
|
||||||
data := l.data
|
data := l.data
|
||||||
for _, v := range data {
|
for _, v := range data {
|
||||||
@@ -97,22 +97,22 @@ func (l *List[T]) Contain(value T) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push append value to the list data
|
// Push append value to the list data.
|
||||||
func (l *List[T]) Push(value T) {
|
func (l *List[T]) Push(value T) {
|
||||||
l.data = append(l.data, value)
|
l.data = append(l.data, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InsertAtFirst insert value into list at first index
|
// InsertAtFirst insert value into list at first index.
|
||||||
func (l *List[T]) InsertAtFirst(value T) {
|
func (l *List[T]) InsertAtFirst(value T) {
|
||||||
l.InsertAt(0, value)
|
l.InsertAt(0, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InsertAtLast insert value into list at last index
|
// InsertAtLast insert value into list at last index.
|
||||||
func (l *List[T]) InsertAtLast(value T) {
|
func (l *List[T]) InsertAtLast(value T) {
|
||||||
l.InsertAt(len(l.data), value)
|
l.InsertAt(len(l.data), value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// InsertAt insert value into list at index
|
// InsertAt insert value into list at index.
|
||||||
func (l *List[T]) InsertAt(index int, value T) {
|
func (l *List[T]) InsertAt(index int, value T) {
|
||||||
data := l.data
|
data := l.data
|
||||||
size := len(data)
|
size := len(data)
|
||||||
@@ -123,7 +123,7 @@ func (l *List[T]) InsertAt(index int, value T) {
|
|||||||
l.data = append(data[:index], append([]T{value}, data[index:]...)...)
|
l.data = append(data[:index], append([]T{value}, data[index:]...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PopFirst delete the first value of list and return it
|
// PopFirst delete the first value of list and return it.
|
||||||
func (l *List[T]) PopFirst() (*T, bool) {
|
func (l *List[T]) PopFirst() (*T, bool) {
|
||||||
if len(l.data) == 0 {
|
if len(l.data) == 0 {
|
||||||
return nil, false
|
return nil, false
|
||||||
@@ -135,7 +135,7 @@ func (l *List[T]) PopFirst() (*T, bool) {
|
|||||||
return &v, true
|
return &v, true
|
||||||
}
|
}
|
||||||
|
|
||||||
// PopLast delete the last value of list and return it
|
// PopLast delete the last value of list and return it.
|
||||||
func (l *List[T]) PopLast() (*T, bool) {
|
func (l *List[T]) PopLast() (*T, bool) {
|
||||||
size := len(l.data)
|
size := len(l.data)
|
||||||
if size == 0 {
|
if size == 0 {
|
||||||
@@ -148,7 +148,7 @@ func (l *List[T]) PopLast() (*T, bool) {
|
|||||||
return &v, true
|
return &v, true
|
||||||
}
|
}
|
||||||
|
|
||||||
// DeleteAt delete the value of list at index
|
// DeleteAt delete the value of list at index.
|
||||||
func (l *List[T]) DeleteAt(index int) {
|
func (l *List[T]) DeleteAt(index int) {
|
||||||
data := l.data
|
data := l.data
|
||||||
size := len(data)
|
size := len(data)
|
||||||
@@ -199,7 +199,7 @@ func (l *List[T]) UpdateAt(index int, value T) {
|
|||||||
l.data = append(data[:index], append([]T{value}, data[index+1:]...)...)
|
l.data = append(data[:index], append([]T{value}, data[index+1:]...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equal compare list to other list, use reflect.DeepEqual
|
// Equal compare list to other list, use reflect.DeepEqual.
|
||||||
func (l *List[T]) Equal(other *List[T]) bool {
|
func (l *List[T]) Equal(other *List[T]) bool {
|
||||||
if len(l.data) != len(other.data) {
|
if len(l.data) != len(other.data) {
|
||||||
return false
|
return false
|
||||||
@@ -214,17 +214,17 @@ func (l *List[T]) Equal(other *List[T]) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsEmpty check if the list is empty or not
|
// IsEmpty check if the list is empty or not.
|
||||||
func (l *List[T]) IsEmpty() bool {
|
func (l *List[T]) IsEmpty() bool {
|
||||||
return len(l.data) == 0
|
return len(l.data) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear the data of list
|
// Clear the data of list.
|
||||||
func (l *List[T]) Clear() {
|
func (l *List[T]) Clear() {
|
||||||
l.data = make([]T, 0)
|
l.data = make([]T, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clone return a copy of list
|
// Clone return a copy of list.
|
||||||
func (l *List[T]) Clone() *List[T] {
|
func (l *List[T]) Clone() *List[T] {
|
||||||
cl := NewList(make([]T, len(l.data)))
|
cl := NewList(make([]T, len(l.data)))
|
||||||
copy(cl.data, l.data)
|
copy(cl.data, l.data)
|
||||||
@@ -232,7 +232,7 @@ func (l *List[T]) Clone() *List[T] {
|
|||||||
return cl
|
return cl
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge two list, return new list, don't change original list
|
// Merge two list, return new list, don't change original list.
|
||||||
func (l *List[T]) Merge(other *List[T]) *List[T] {
|
func (l *List[T]) Merge(other *List[T]) *List[T] {
|
||||||
l1, l2 := len(l.data), len(other.data)
|
l1, l2 := len(l.data), len(other.data)
|
||||||
ml := NewList(make([]T, l1+l2))
|
ml := NewList(make([]T, l1+l2))
|
||||||
@@ -243,17 +243,17 @@ func (l *List[T]) Merge(other *List[T]) *List[T] {
|
|||||||
return ml
|
return ml
|
||||||
}
|
}
|
||||||
|
|
||||||
// Size return number of list data items
|
// Size return number of list data items.
|
||||||
func (l *List[T]) Size() int {
|
func (l *List[T]) Size() int {
|
||||||
return len(l.data)
|
return len(l.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cap return cap of the inner data
|
// Cap return cap of the inner data.
|
||||||
func (l *List[T]) Cap() int {
|
func (l *List[T]) Cap() int {
|
||||||
return cap(l.data)
|
return cap(l.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Swap the value of index i and j in list
|
// Swap the value of index i and j in list.
|
||||||
func (l *List[T]) Swap(i, j int) {
|
func (l *List[T]) Swap(i, j int) {
|
||||||
size := len(l.data)
|
size := len(l.data)
|
||||||
if i < 0 || i >= size || j < 0 || j >= size {
|
if i < 0 || i >= size || j < 0 || j >= size {
|
||||||
@@ -262,14 +262,14 @@ func (l *List[T]) Swap(i, j int) {
|
|||||||
l.data[i], l.data[j] = l.data[j], l.data[i]
|
l.data[i], l.data[j] = l.data[j], l.data[i]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reverse the item order of list
|
// Reverse the item order of list.
|
||||||
func (l *List[T]) Reverse() {
|
func (l *List[T]) Reverse() {
|
||||||
for i, j := 0, len(l.data)-1; i < j; i, j = i+1, j-1 {
|
for i, j := 0, len(l.data)-1; i < j; i, j = i+1, j-1 {
|
||||||
l.data[i], l.data[j] = l.data[j], l.data[i]
|
l.data[i], l.data[j] = l.data[j], l.data[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unique remove duplicate items in list
|
// Unique remove duplicate items in list.
|
||||||
func (l *List[T]) Unique() {
|
func (l *List[T]) Unique() {
|
||||||
data := l.data
|
data := l.data
|
||||||
size := len(data)
|
size := len(data)
|
||||||
@@ -303,7 +303,7 @@ func (l *List[T]) Union(other *List[T]) *List[T] {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// Intersection creates a new list whose element both be contained in list l and other
|
// Intersection creates a new list whose element both be contained in list l and other.
|
||||||
func (l *List[T]) Intersection(other *List[T]) *List[T] {
|
func (l *List[T]) Intersection(other *List[T]) *List[T] {
|
||||||
result := NewList(make([]T, 0))
|
result := NewList(make([]T, 0))
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user