mk-toolブログ

エンジニアと家のことをごちゃごちゃと書いてます

【Go】順リストを書く

概要

いまさらですが順リストを書く。 元ネタは改訂第4版 C言語によるはじめてのアルゴリズム入門

本題

以下ソースコードold.pointer = nの次にold = nとあるのですが、これってoldの指すアドレスを変えるってことなんだな、と理解するまでに苦労した。オブジェクトとして考えてはいけない。

package main

import (
    "fmt"
)

type node struct {
    name string
    tel string
  pointer *node
}

func main() {
    var head *node = new(node)
    var old *node = head

    for{
        n := new(node)
        fmt.Println("name tel")
        fmt.Scanf("%s %s", &n.name, &n.tel)
        old.pointer = n
        old = n

        if(!next()){
            show(head.pointer)
            break
        }
    }
}

func show(n *node) {
    fmt.Println("/////順リスト/////")
    for{
        if(n == nil){
            break
        }
        fmt.Printf("%s %s", n.name, n.tel)
        fmt.Println("")
        n = n.pointer
    }
}

func next() bool {
    continue_str := ""
    for{
        fmt.Println("continue? [y/n]")
        fmt.Scanf("%s", &continue_str)
        if(continue_str == "y"){
            return true
        }
        if(continue_str == "n"){
            return false
        }
    }
}

結果 name telと聞かれるので適当な文字列を半角スペース区切りで2つ入力する。 continueの旨を聞かれるのでy/nで回答。 yをすると、もう一度name telと聞かれる繰り返し。 nをすると作られたリストが表示される。

name tel
a 1
continue? [y/n]
y
name tel
b 2
continue? [y/n]
y
name tel
c 3
continue? [y/n]
n
/////順リスト/////
a 1
b 2
c 3