mirror of
https://github.com/pyihe/go-pkg.git
synced 2025-10-08 01:10:51 +08:00
style(go-pkg): rename pkg
This commit is contained in:
85
listpkg/list_array.go
Normal file
85
listpkg/list_array.go
Normal file
@@ -0,0 +1,85 @@
|
||||
package listpkg
|
||||
|
||||
import "sync"
|
||||
|
||||
const (
|
||||
defaultCap = 128
|
||||
)
|
||||
|
||||
// ArrayList 切片实现的队列
|
||||
type ArrayList struct {
|
||||
mu *sync.Mutex
|
||||
data []interface{}
|
||||
}
|
||||
|
||||
func NewArrayList() *ArrayList {
|
||||
return &ArrayList{
|
||||
mu: &sync.Mutex{},
|
||||
data: make([]interface{}, 0, defaultCap),
|
||||
}
|
||||
}
|
||||
|
||||
// LPush 从队首添加元素
|
||||
func (array *ArrayList) LPush(datas ...interface{}) {
|
||||
array.mu.Lock()
|
||||
defer array.mu.Unlock()
|
||||
|
||||
n := len(datas)
|
||||
if n == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
length := len(array.data)
|
||||
capacity := cap(array.data)
|
||||
switch length == capacity {
|
||||
case true: // 如果已经放满了,需要扩容
|
||||
na := make([]interface{}, length+1, capacity+capacity/2)
|
||||
copy(na[1:], array.data)
|
||||
na[0] = datas
|
||||
array.data = na
|
||||
default: // 没有放满的话
|
||||
array.data = append(array.data, nil)
|
||||
for i := length; i > 0; i-- {
|
||||
array.data[i] = array.data[i-1]
|
||||
}
|
||||
array.data[0] = datas
|
||||
}
|
||||
}
|
||||
|
||||
// LPop 从队首取数据
|
||||
func (array *ArrayList) LPop() (data interface{}) {
|
||||
array.mu.Lock()
|
||||
defer array.mu.Unlock()
|
||||
if len(array.data) == 0 {
|
||||
return
|
||||
}
|
||||
data = array.data[0]
|
||||
array.data = array.data[1:]
|
||||
return
|
||||
}
|
||||
|
||||
// RPush 从队尾添加元素
|
||||
func (array *ArrayList) RPush(data interface{}) {
|
||||
array.mu.Lock()
|
||||
array.data = append(array.data, data)
|
||||
array.mu.Unlock()
|
||||
}
|
||||
|
||||
// RPop 从队尾取出并删除元素
|
||||
func (array *ArrayList) RPop() (data interface{}) {
|
||||
array.mu.Lock()
|
||||
defer array.mu.Unlock()
|
||||
|
||||
n := len(array.data)
|
||||
if n == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
data = array.data[n-1]
|
||||
array.data = array.data[:n-1]
|
||||
return data
|
||||
}
|
||||
|
||||
func (array *ArrayList) Data() []interface{} {
|
||||
return array.data
|
||||
}
|
Reference in New Issue
Block a user