container/list提供双向链表,支持O(1)插入删除,可用于实现队列、栈等结构,但查找为O(n),需注意类型断言和并发安全问题。

Go语言标准库中的
container/list
interface{}container/list
List
常用方法包括:
package main
import (
"container/list"
"fmt"
)
func main() {
l := list.New()
l.PushBack(1)
l.PushBack(2)
l.PushBack(3)
for e := l.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
}
队列遵循“先进先出”原则,可以用
PushBack
Remove(Front())
立即学习“go语言免费学习笔记(深入)”;
简单封装一个队列结构:
type Queue struct {
list *list.List
}
func NewQueue() *Queue {
return &Queue{list: list.New()}
}
func (q *Queue) Enqueue(value interface{}) {
q.list.PushBack(value)
}
func (q *Queue) Dequeue() interface{} {
if q.list.Len() == 0 {
return nil
}
front := q.list.Front()
return q.list.Remove(front)
}
func (q *Queue) Len() int {
return q.list.Len()
}
func (q *Queue) Front() interface{} {
if q.list.Len() == 0 {
return nil
}
return q.list.Front().Value
}
q := NewQueue()
q.Enqueue("first")
q.Enqueue("second")
fmt.Println(q.Dequeue()) // 输出 first
fmt.Println(q.Dequeue()) // 输出 second
栈是“后进先出”,可以用
PushBack
Remove(Back())
type Stack struct {
list *list.List
}
func NewStack() *Stack {
return &Stack{list: list.New()}
}
func (s *Stack) Push(value interface{}) {
s.list.PushBack(value)
}
func (s *Stack) Pop() interface{} {
if s.list.Len() == 0 {
return nil
}
back := s.list.Back()
return s.list.Remove(back)
}
func (s *Stack) Peek() interface{} {
if s.list.Len() == 0 {
return nil
}
return s.list.Back().Value
}
container/list
interface{}List
基本上就这些。对于大多数中小型项目,
container/list
List
以上就是Golang container/list链表与队列实现实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号