Goでの双方向チェーンリストの使用

8261 ワード

引用する
Goの基礎知識についてしばらく見てから、言語そのものについてある程度理解しました.実際のプログラミングでは、特定の機能を実現するために栄国データ構造を必要とするシーンがたくさんあります.一般的なデータ構造では、まずプログラミング言語を使用して持参したライブラリを思い浮かべます.今回は、Goのチェーンテーブル(双方向)--listの使用を見てみましょう.
チェーンテーブルの使用
Listはcontainerパッケージにあり、要素の挿入、削除、移動などの機能を含む基本的な双方向チェーンテーブル機能を実現しています.
使いやすいように、ここではまず一般的な方法をリストします.
初期化
//     list.New()         ,  ,       list     ,      
func New() *List
//      Init()         
func (l *List) Init() *List

要素の追加
双方向チェーンテーブルである以上、Go内のチェーンテーブルはチェーンテーブルのヘッダとテールに要素を追加する方法を提供する.
//           
func (l *List) PushFront(v interface{}) *Element
//           
func (l *List) PushBack(v interface{}) *Element

先頭ノードを直接追加することに加えて、Go内のチェーンテーブルは、ある特定のノードの位置にある挿入ノードの方法を提供し、1つのノードの前または1つのノードの後に要素を挿入する2つの挿入方法がある.
//            
func (l *List) InsertBefore(v interface{}, mark *Element) *Element

//            
func (l *List) InsertAfter(v interface{}, mark *Element) *Element

チェーンテーブルを巡る
まず,チェーンテーブルの2つの方法でヘッダノードまたはテールノードを得,その後,ノードの前方または後方の方法でチェーンテーブルを遍歴する.
//     
//         
func (l *List) Front() *List
//         
func (l *List) Back() *List

//     
//        
func (e *Element) Next() *Element
//        
func (e *Element) Prev() *Element

要素の削除
Listは、指定した要素(ノード)を削除する方法を提供します.
func (l *List) Remove(e *Element) interface{}

要素の移動
Listでは、要素を移動するためのカラムメソッドもいくつか用意されています.
//      ,  e    l   ,       ,    e   nil
//              
func (l *List) MoveToFront(e *Element)
//              
func (l *List) MoveToBack(e *Element)
//             mark  
func (l *List) MoveBefore(e, mark *Element)
//             mark  
func (l *List) MoveAfter(e, mark *Element)

その他
//     l   
func (l *List) Len() int { return l.len }

以上、Goで提供されている標準ライブラリにおける双方向チェーンテーブルcontainer/listの使用方法の大部分について説明したが、次にこのソース分析でこれらの方法のソースコードを詳細に分析し、どのように使用されているかを見てみる.