import "container/ring"
循環リストの操作を実装しています。
パッケージファイル
ring.go
Ring型
Ringは循環リストでの要素です。リングには始まりと終わりがありません。どのリング要素のポインタもリング全体への参照として扱えます。空のリングはnilリングポインタとして表わされます。ゼロ値のRingは1要素のリングを持ち、Valueはnilです。
type Ring struct {
Value interface{} // for use by client; untouched by this library
// contains unexported fields
}
New関数
func New(n int) *Ring
Newは、n個のリング要素を作成します。
(*Ring) Iter関数
func (r *Ring) Iter() <-chan interface{}
(*Ring) Len関数
func (r *Ring) Len() int
Lenは、リングrの要素数を計算します。本関数の実行は要素数に比例した時間がかかります。
(*Ring) Link関数
func (r *Ring) Link(s *Ring) *Ring
Linkは、リングrとsをつなぎ、r.Next()はsとなります。返される値はつなぎかえる前のr.Next()のリングです。rは空ではいけません。
rとsが同じリングを指している場合はrとs間の要素はリングから外されます。外された要素はサブリングを形成し、そのサブリングへの参照が返されます。(外された要素がなかった場合はつなぐ前のr.Next()が返されます。nilは返しません)
rとsが異なるリングを指している場合はrの後ろにsの要素を挿入し、一つのリングを構成します。つなぎかえる前にsとつながっていた要素の後ろの要素が返されます。
(*Ring) Move関数
func (r *Ring) Move(n int) *Ring
Moveは、n < 0の場合は後ろへ、n >= 0の場合は前へn % r.Len()個分の要素へ移動します。rは空ではいけません。
(*Ring) Next関数
func (r *Ring) Next() *Ring
Nextは、次のリング要素を返します。rは空ではいけません。
(*Ring) Prev関数
func (r *Ring) Prev() *Ring
Prevは、ひとつ前のリング要素を返します。rは空ではいけません。
(*Ring) Unlink
func (r *Ring) Unlink(n int) *Ring
Unlinkは、r.Next()から数えてn % r.Len()個の要素をリングから外します。n % r.Len() == 0の場合は何もしません。外された要素から成るサブリングを返します。rは空ではいけません。
Trackback URL
Comments