2020年6月12日金曜日

開発環境

Go Systems Programming: Master Linux and Unix system level programming with Go (Mihalis Tsoukalos(著)、Packt Publishing)のChapter 4(Go Packages, Algorithms, and Data Structures)、Exercises 4.の解答を求めてみる。

コード

package main

import (
 "fmt"
 "math/rand"
 "time"
)

type dnode struct {
 value int
 prev  *dnode
 next  *dnode
}

type droot struct {
 *dnode
}

func newDoublyLinkedList() *droot {
 return new(droot)
}

func (r *droot) addNode(v int) {
 if r.dnode == nil {
  r.dnode = &dnode{v, nil, nil}
 } else {
  n := r.dnode
  for n.next != nil {
   n = n.next
  }
  n.next = &dnode{v, n, nil}
 }
}

func (r *droot) traverse() {
 if r.dnode == nil {
  fmt.Println("<-> Empty list!")
  return
 }
 for n := r.dnode; n != nil; n = n.next {
  fmt.Printf("%v <-> ", n.value)
 }
 fmt.Println()
}

func main() {
 rand.Seed(time.Now().UnixNano())
 r := newDoublyLinkedList()
 r.traverse()
 for i := 0; i < 10; i++ {
  r.addNode(rand.Intn(100))
  r.traverse()
 }
}

入出力結果(Zsh、PowerShell、Terminal)

% go build
% ./list 
<-> Empty list!
33 <-> 
33 <-> 33 <-> 
33 <-> 33 <-> 23 <-> 
33 <-> 33 <-> 23 <-> 80 <-> 
33 <-> 33 <-> 23 <-> 80 <-> 64 <-> 
33 <-> 33 <-> 23 <-> 80 <-> 64 <-> 51 <-> 
33 <-> 33 <-> 23 <-> 80 <-> 64 <-> 51 <-> 46 <-> 
33 <-> 33 <-> 23 <-> 80 <-> 64 <-> 51 <-> 46 <-> 43 <-> 
33 <-> 33 <-> 23 <-> 80 <-> 64 <-> 51 <-> 46 <-> 43 <-> 15 <-> 
33 <-> 33 <-> 23 <-> 80 <-> 64 <-> 51 <-> 46 <-> 43 <-> 15 <-> 2 <-> 
% ./list
<-> Empty list!
35 <-> 
35 <-> 34 <-> 
35 <-> 34 <-> 72 <-> 
35 <-> 34 <-> 72 <-> 13 <-> 
35 <-> 34 <-> 72 <-> 13 <-> 69 <-> 
35 <-> 34 <-> 72 <-> 13 <-> 69 <-> 57 <-> 
35 <-> 34 <-> 72 <-> 13 <-> 69 <-> 57 <-> 48 <-> 
35 <-> 34 <-> 72 <-> 13 <-> 69 <-> 57 <-> 48 <-> 10 <-> 
35 <-> 34 <-> 72 <-> 13 <-> 69 <-> 57 <-> 48 <-> 10 <-> 36 <-> 
35 <-> 34 <-> 72 <-> 13 <-> 69 <-> 57 <-> 48 <-> 10 <-> 36 <-> 9 <-> 
% ./list
<-> Empty list!
70 <-> 
70 <-> 36 <-> 
70 <-> 36 <-> 53 <-> 
70 <-> 36 <-> 53 <-> 60 <-> 
70 <-> 36 <-> 53 <-> 60 <-> 25 <-> 
70 <-> 36 <-> 53 <-> 60 <-> 25 <-> 98 <-> 
70 <-> 36 <-> 53 <-> 60 <-> 25 <-> 98 <-> 9 <-> 
70 <-> 36 <-> 53 <-> 60 <-> 25 <-> 98 <-> 9 <-> 65 <-> 
70 <-> 36 <-> 53 <-> 60 <-> 25 <-> 98 <-> 9 <-> 65 <-> 71 <-> 
70 <-> 36 <-> 53 <-> 60 <-> 25 <-> 98 <-> 9 <-> 65 <-> 71 <-> 65 <-> 
% ./list
<-> Empty list!
25 <-> 
25 <-> 62 <-> 
25 <-> 62 <-> 0 <-> 
25 <-> 62 <-> 0 <-> 76 <-> 
25 <-> 62 <-> 0 <-> 76 <-> 1 <-> 
25 <-> 62 <-> 0 <-> 76 <-> 1 <-> 82 <-> 
25 <-> 62 <-> 0 <-> 76 <-> 1 <-> 82 <-> 20 <-> 
25 <-> 62 <-> 0 <-> 76 <-> 1 <-> 82 <-> 20 <-> 84 <-> 
25 <-> 62 <-> 0 <-> 76 <-> 1 <-> 82 <-> 20 <-> 84 <-> 13 <-> 
25 <-> 62 <-> 0 <-> 76 <-> 1 <-> 82 <-> 20 <-> 84 <-> 13 <-> 45 <-> 
% ./list
<-> Empty list!
94 <-> 
94 <-> 58 <-> 
94 <-> 58 <-> 53 <-> 
94 <-> 58 <-> 53 <-> 86 <-> 
94 <-> 58 <-> 53 <-> 86 <-> 11 <-> 
94 <-> 58 <-> 53 <-> 86 <-> 11 <-> 55 <-> 
94 <-> 58 <-> 53 <-> 86 <-> 11 <-> 55 <-> 61 <-> 
94 <-> 58 <-> 53 <-> 86 <-> 11 <-> 55 <-> 61 <-> 78 <-> 
94 <-> 58 <-> 53 <-> 86 <-> 11 <-> 55 <-> 61 <-> 78 <-> 76 <-> 
94 <-> 58 <-> 53 <-> 86 <-> 11 <-> 55 <-> 61 <-> 78 <-> 76 <-> 56 <-> 
% 

0 コメント:

コメントを投稿