Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gunosy.go #2 container

Satoshi
September 25, 2014

Gunosy.go #2 container

go lang study

Satoshi

September 25, 2014
Tweet

More Decks by Satoshi

Other Decks in Programming

Transcript

  1. 自己紹介 •  印南 聡志  (いんなみ さとし)   •  6月にGunosyに入社  

    •  Java/Ruby  …  最近  Python/Go  始めました    
  2. List •  双方向連結リスト   – 各エレメントが前後のエレメントへのリンク    (ポインタ)を所持   – インサートは高速だがインデックス参照は不可   – ジェネリクスの機能はなし

      •  型アサーションを使う必要がある   Element   value Element   value Element   value root next  *Element prev  *Element next  *Element prev  *Element
  3. List  –  type  Element •  type  Element     – 双方向リストの要素(エレメント)、格納するデータ、

    前後のリストのリンクを持つ   – Value  interface{}     – func (*Element)  Next   – func  (*Element)  Prev    
  4. List  –  type  List •  type  List      

       func  New()  *List          func  (l  *List)  Back()  *Element          func  (l  *List)  Front()  *Element          func  (l  *List)  Init()  *List          func  (l  *List)  InsertATer(v  interface{},  mark  *Element)  *Element          func  (l  *List)  InsertBefore(v  interface{},  mark  *Element)  *Element          func  (l  *List)  Len()  int          func  (l  *List)  MoveATer(e,  mark  *Element)          func  (l  *List)  MoveBefore(e,  mark  *Element)          func  (l  *List)  MoveToBack(e  *Element)          func  (l  *List)  MoveToFront(e  *Element)          func  (l  *List)  PushBack(v  interface{})  *Element          func  (l  *List)  PushBackList(other  *List)          func  (l  *List)  PushFront(v  interface{})  *Element          func  (l  *List)  PushFrontList(other  *List)          func  (l  *List)  Remove(e  *Element)  interface{}
  5. Ring  –  type  Ring    func  New(n  int)  *Ring  

       func  (r  *Ring)  Do(f  func(interface{}))      func  (r  *Ring)  Len()  int      func  (r  *Ring)  Link(s  *Ring)  *Ring      func  (r  *Ring)  Move(n  int)  *Ring      func  (r  *Ring)  Next()  *Ring      func  (r  *Ring)  Prev()  *Ring      func  (r  *Ring)  Unlink(n  int)  *Ring  
  6. Ring h?p://play.golang.org/p/2SqEm4PGHT 出力:   要素数:    10   0  1

     2  3  4  5  6  7  8  9  0  1  2  3  4  5  6  7  8  9      
  7. Heap •  二分木構造   •  取り出される値が常に最小になる   – Init,  Fix,  Pop,

     Push,  Remove実行時にmin-­‐heapが 走る     •  List,  Ringとは異なり自身で定義した配列型に heap.interfaceを実装  
  8. Heap •  実装する必要のある関数   – func(Interface)  Pop()     – func(Interface)  Push()

      – func  (Interface)  Len()   – func  (Interface)  Less()   – func  (Interface)  Swap()   デモ:h?p://play.golang.org/p/QIxb4gHIkW  
  9. まとめ •  Container   – データのまとまりを便利に扱うためのパッケージ   •  List  :  双方向連結リスト

      •  Ring  :  循環リスト   •  Heap  :  2分木構造   – インサートが高速   – インデックスでの要素指定ができない