golang中container/ring包用法
ring包实现了环形链表的操作。
type Ring struct { Value interface{} // 供调用者使用,本包不会对该值进行操作 // 包含未导出字段 } func New(n int) *Ring //创建一个长度为n的环形链表 如果r和s指向同一个环形链表,则会删除掉r和s之间的元素,删掉的元素构成一个子链表,返回指向该子链表的指针(r的原后继元素);如果没有删除元素,则仍然返回r的原后继元素,而不是nil。如果r和s指向不同的链表,将创建一个单独的链表,将s指向的链表插入r后面,返回s原最后一个元素后面的元素(即r的原后继元素)。 func (r *Ring) Unlink(n int) *Ring //删除链表中n % r.Len()个元素,从r.Next()开始删除。如果n % r.Len() == 0,不修改r。返回删除的元素构成的链表,r不能为空。 func (r *Ring) Next() *Ring //获取当前元素的下个元素 func (r *Ring) Prev() *Ring //获取当前元素的上个元素 举例说明其用法: package main import ( "container/ring" "fmt" ) func main() { RingFunc() } func RingFunc() { r := ring.New(10) //初始长度10 for i := 0; i < r.Len(); i++ { r.Value = i r = r.Next() } for i := 0; i < r.Len(); i++ { fmt.Println(r.Value) r = r.Next() } r = r.Move(6) fmt.Println(r.Value) //6 r1 := r.Unlink(19) //移除19%10=9个元素 for i := 0; i < r1.Len(); i++ { fmt.Println(r1.Value) r1 = r1.Next() } fmt.Println(r.Len()) //10-9=1 fmt.Println(r1.Len()) //9 } 参考: https://golang.org/pkg/container/ring/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |