内容简介:底层双向链表,首位首位相连,形成环。只有一个结构体,数据成员next和prev私有不对外暴露,Value为interface{}类型,外部可以直接访问。可通过Next和Prev访问前后的元素。
底层双向链表,首位首位相连,形成环。
只有一个结构体,数据成员next和prev私有不对外暴露,Value为interface{}类型,外部可以直接访问。
可通过Next和Prev访问前后的元素。
注意,Next调用时如果next为nil,那么会将当前Ring元素的next和prev设置为自己。其实我觉得直接panic也可以。因为这属于未初始化的Ring。是错误用法。
func (r *Ring) Link(s *Ring) *Ring
连接两个ring。假设链接前:
r n a p s b
则链接后:
r s b p n a
即将整个s插入在r之后,r原本的next之前
func (r *Ring) Unlink(n int) *Ring
删除r之后的第n个元素,但是我很奇怪为什么n为0即为什么不能删除自身这个元素
func (r *Ring) Move(n int) *Ring
访问r之后的n个元素,如果n为负数,则是向前访问。
还有几个常规函数:
func New(n int) *Ring
用于创建n个元素的ring。
func (r *Ring) Len() int
用于获取长度,时间复杂度是O(n)。
func (r *Ring) Do(f func(interface{}))
对ring中所有元素执行f操作。
总结:个人感觉Ring的用处不是很大,普通的业务场景直接用数组或者链表就好。如果是高性能场景使用固定大小的环形队列,用ring还不如用数组。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Practical Algorithms for Programmers
Andrew Binstock、John Rex / Addison-Wesley Professional / 1995-06-29 / USD 39.99
Most algorithm books today are either academic textbooks or rehashes of the same tired set of algorithms. Practical Algorithms for Programmers is the first book to give complete code implementations o......一起来看看 《Practical Algorithms for Programmers》 这本书的介绍吧!