登录
首页 >  Golang >  Go教程

Golang containerRing循环列表操作示例

时间:2026-05-04 15:55:30 424浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《Golang containerRing循环列表操作示例》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

首先使用ring.New(3)创建长度为3的空循环链表,再通过循环依次赋值1、2、3,最后遍历输出各节点值。

Golang containerRing循环列表操作示例

Go语言中没有内置的循环链表结构,但可以通过container/ring包实现循环列表操作。ring提供了一个双向循环链表的数据结构,每个节点都指向下一个和前一个节点,首尾相连,形成环形结构。

基本创建与初始化

使用ring.New(n)可以创建一个长度为n的循环链表,初始所有节点值为nil。通过Next()Prev()可以遍历环形结构。

  • 创建一个长度为3的空循环列表:r := ring.New(3)
  • 为每个节点赋值:

示例代码:

package main

import (
    "container/ring"
    "fmt"
)

func main() {
    // 创建长度为3的ring
    r := ring.New(3)
    // 赋值
    for i := 0; i 

元素插入与连接

可以在任意位置插入新节点,或连接两个独立的ring实例。

  • 在当前节点后插入新节点:r.Link(&newRing)
  • 将两个ring合并成一个大环

插入示例:

// 插入值为10的新节点
newR := ring.New(1)
newR.Value = 10
r.Next().Link(newR) // 在r的下一个位置插入

遍历与删除操作

Do方法适合只读遍历,而手动移动指针更适合修改或删除场景。

  • 使用Do(f func(interface{}))遍历所有元素
  • 通过Unlink(n)删除后续n个节点并返回被删子环
  • 跳过某个节点相当于逻辑删除

删除部分节点示例:

// 删除后两个节点
removed := r.Unlink(2)
fmt.Printf("删除了 %d 个节点\n", removed.Len())

基本上就这些。container/ring轻量高效,适用于需要环形缓冲、定时任务调度等场景。注意它不是并发安全的,多协程访问时需自行加锁保护。理解Next/Prev/Link/Unlink这几个核心方法就能灵活应对大多数循环列表需求。

今天关于《Golang containerRing循环列表操作示例》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>