ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

データ構造とプログラミング(放送大学教材)の正誤

前の「データ構造とプログラミング」の記事に書いたけど、このテキストにいくつかの誤りと思われる点があった。そしてそれを質問していたが、やはりそれが誤りだと返事があったのでまとめておく。

細かいところなので、このテキストを読んでいない人には全く価値のない記事。質問から一部を変更とかなり細かい不要な箇所は削除している。


まず、誤りはこの2つ。

P20(下部テキスト).

「whileの後に続く括弧内が条件文となっており、この条件文が条件を満たすまで処理を続け、条件が満たされると繰り返し処理が終了する。」
これは、「この条件文を満たす間処理を続け、条件が満たされなくなると繰替えし処理が終了する。」の誤り。

P81(3段落目).

「図5-10(右)のように、子が空(NULL)となっているノードにも、子ノードにつながる点線で示したようなエッジがあると考え、」
P83(図5-10).の右図には点線で示された部位がない。左図と比べて右図に増えているエッジが点線の部分になる。


そして、ここからが誤りではあるが説明として支障がない部分とわかりづらい点。

1. P16.P17等、初期のサンプル

printfにて"\n"を最初に出力しているため出力の最初に改行が入るが、出力結果にそれが反映されていない。P28(リスト2-2)や一部のサンプルのみこれが反映されている。

main関数の引数として使われていないコマンド引数を受け取っているが、それらは使われておらず、初期サンプル以外では多くがvoidとされている。

2. P18(リスト1-3).P19(リスト1-5).P28(リスト2-2)等

他のサンプルでは出力結果としてコードの実行コマンドは表示されていないが、このサンプルに限りコマンドの実行が表示されている。scanfを使っているためということのようだが、実行後の「$」はリスト1-3にのみ表示されており、こちらも統一感がない。

また上の通り、リスト1-3のサンプルについては入力と出力の間の改行が表示されているにも関わらず、リスト1-5については入力と出力間の改行が表示されていない。

3. P19(リスト1-5)等、これ以後のサンプルのいくつか

stdlibの機能が使われていないにも関わらず、不要なライブラリがincludeされている。

4. P16(リスト1-1).

typedefにより構造体を命名しているにも関わらずその名前が利用されていない。

5. P27(リスト27)等、以後のサンプル

これ以後のサンプルにはヘッダにコンパイルオプションの記載があるが、gccの引数に「-lm」と付いているにも関わらず「math.h」を読み込んでいないため不要。

P166(中頃).

「まず、配列AとBの最初の要素を比較し、小さい方の要素を取り出して配列Cの最後に追加する。」

こちらは「配列Cの最後」ではなく、「配列Cの最初」になる。配列Cにスタックしていくという意味では「最後」が正しいが、「配列AとBの最初の要素を比較し」となっているから、この場合に限り「最初」がわかりやすい。


こんな感じ。プログラムコードについてはまだまだかなりツッコミどころはあるが揚げ足取りみたいになるので無視した。

プログラミングの宝箱 アルゴリズムとデータ構造 第2版

プログラミングの宝箱 アルゴリズムとデータ構造 第2版

プログラミングに活かすデータ構造とアルゴリズムの基礎知識 (UNIX MAGAZINE LIBRARY)

プログラミングに活かすデータ構造とアルゴリズムの基礎知識 (UNIX MAGAZINE LIBRARY)