第1章 プログラミングの原理 1 |
1.1 導入 2 |
1.2 ライフゲーム 5 |
1.3 プログラミングスタイル 12 |
1.4 コーディング・テスト・改良 23 |
1.5 プログラムの保守 40 |
1.6 結論と復習 46 |
第2章 スタックの導入 57 |
2.1 スタックの詳細について 58 |
2.2 スタックの実装法 65 |
2.3 アプリケーション:電卓 76 |
2.4 アプリケーション括弧の対応 81 |
2.5 抽象データ型とその実装 83 |
第3章 キュー 91 |
3.1 定義 92 |
3.2 キューの導入 98 |
3.3 C++における円形のキューの導入 103 |
3.4 デモとテスト 108 |
3.5 キューを用いたアプリケーション:シミュレーション 111 |
第4章 連鎖構造を持つスタックとキュー 131 |
4.1 ポイントと連鎖を持つ構造 132 |
4.2 リンクスタック 146 |
4.3 より安全なリンクスタックの実装 152 |
4.4 リンクキュー 158 |
4.5 アプリケーション:多項式演算 163 |
4.6 抽象データ型とその実装 176 |
第5章 再帰 181 |
5.1 再帰の紹介 182 |
5.2 再帰の原理 194 |
5.3 バックトラック:仕事を後回しにする 208 |
5.4 木構造プログラミング:ゲームの先読み 225 |
第6章 リスト 241 |
6.1 リストの定義 242 |
6.2 リストの実装 247 |
6.3 文字列 265 |
6.4 アプリケーション:テキストエディタ 276 |
6.5 配列の中のリンクリスト 285 |
6.6 アプリケーション;順列の生成 296 |
第7章 探索 305 |
7.1 探索:紹介と表記法 306 |
7.2 逐次探索 309 |
7.3 二分探索 316 |
7.4 比較木 326 |
7.5 下界 340 |
7.6 漸近 345 |
第8章 ソート 363 |
8.1 イントロダクション 364 |
8.2 挿入ソート 366 |
8.3 選択ソート 377 |
8.4 シェルソート 382 |
8.5 下界 385 |
8.6 分割統治ソート 389 |
8.7 リンクリストのマージソート 397 |
8.8 連続リストのクイックソート 406 |
8.9 ヒープとヒープソート 419 |
8.10 批評:方法の比較 429 |
第9章 テーブルと情報の検索 439 |
9.1 序章:lognバリアの打破 440 |
9.2 2次元テーブル 441 |
9.3 いろいろな形のテーブル 444 |
9.4 テーブル:新しい抽象データ型 450 |
9.5 アプリケーション:ラディックスソート 454 |
9.6 ハッシュ 460 |
9.7 ハッシュ法の分析 476 |
9.8 結論:手法の比較 483 |
9.9 応用:ライフゲーム 484 |
第10章 二分木 497 |
10.1 二分木 498 |
10.2 二分探索木 514 |
10.3 二分探索木の構築 536 |
10.4 高さのバランスを保つ探索木:AVL木 548 |
10.5 スプレイ木:自己調節データ構造 568 |
第11章 多分木 605 |
11.1 オーチャード、木、二分木 606 |
11.2 辞書編集上での探索木:トライズ(TRIES) 617 |
11.3 外部探索:B-木 623 |
11.4 二色木 650 |
第12章 グラフ 667 |
12.1 数学的な予備知識 668 |
12.2 コンピューターを用いた表現方法 670 |
12.3 グラフの巡回 674 |
12.4 トポロジー的な整列 679 |
12.5 貪欲アルゴリズム:最短パス問題 684 |
12.6 最小全域木 690 |
12.7 データ構造としてのグラフの有用性 697 |
第13章 事例研究:ポーランド記法 703 |
13.1 問題 704 |
13.2 アイディア 706 |
13.3 ポーランド記法の式の評価 710 |
13.4 中置記法からポーランド記法への変換 725 |
13.5 対話型の式の評価機 732 |