開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
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 コメント:
コメントを投稿