譯者序
前言
致謝
第1章 緒論
1.1 評估算法
1.2 修改算法
1.2.1 主要的優化︰I/O
1.2.2 主要的優化︰函數調用
1.3 資源和參考資料
第2章 基本數據結構
2.1 鏈表
2.1.1 雙向鏈表
2.1.2 鏈表的其他特征
2.2 棧和隊列
2.2.1 棧的特征
2.2.2 隊列的特征
第3章 散列
3.1 散列的概念
3.2 散列函數
3.3 沖突解決方法
3.3.1 線性再散列法
3.3.2 非線性再散列法
3.3.3 外部拉鏈法
3.4 性能問題
3.5 資源和參考資料
第4章 查找
4.1 查找的特征
4.1.1 準備時間
4.1.2 運行時間
4.1.3 回溯的需要
4.2 蠻力查找
4.3 Boyer-Moore查找
4.3.1 啟發式方法#1︰跳過字符
4.3.2 啟發式方法#2︰重復模式
4.4 多字符串查找
4.5 用于正則表達式的字符串查找︰grep
4.6 近似字符串匹配技術
4.7 語音比較︰Soundex算法
4.8 Metaphone︰現代的Soundex
4.9 選擇技術
4.10 資源和參考資料
4.10.1 通用參考資料
4.10.2 Boyer-Moore
4.10.3 多字符串查找
4.10.4 正則表達式查找
4.10.5 近似字符串匹配
4.10.6 Soundex算法和Metaphone算法
第5章 排序
5.1 排序的基本特征
5.1.1 穩定性
5.1.2 對哨兵的需求
5.1.3 對鏈表進行排序的能力
5.1.4 輸入的階的相關性
5.1.5 對額外存儲空間的需求
5.1.6 內部排序技術與外部排序技術
5.2 排序模型
5.2.1 冒泡排序
5.2.2 插入排序
5.2.3 希爾排序
5.2.4 快速排序
5.2.5 堆排序
5.3 對鏈表進行插入排序
5.4 對鏈表進行快速排序
5.5 對多個鍵進行排序——不穩定排序的修正方法
5.6 網絡排序
5.7 小結︰選擇一種排序算法
5.8 資源和參考資料
第6章 樹
6.1 二叉樹
6.1.1 樹查找
6.1.2 節點插入
6.1.3 節點刪除
6.1.4 二叉查找樹的性能
6.1.5 AVL樹
6.2 紅黑樹
6.3 伸展樹
6.4 B樹
6.4.1 保持B樹平衡
6.4.2 實現B樹算法
6.4.3 B樹實現的代碼
6.5 可以看見森林嗎
6.6 資源和參考資料
第7章 日期和時間
7.1 日期例程的庫
7.2 時間例程
7.3 用于日期和時間數據的格式
7.4 最後的提醒
7.5 資源和參考資料
第8章 任意精度的算術
8.1 構建計算器8.2表示數字
8.3 計算
8.4 加法
8.5 減法
8.6 乘法
8.7 除法
8.8 關于計算器要注意的最後幾點
8.9 用于計算平方根的牛頓算法
8.10 分期付款表
8.11 資源和參考資料
第9章 數據壓縮
9.1 行程編碼
9.2 霍夫曼壓縮
9.2.1 代碼
9.2.2 其他問題
9.3 滑動窗口壓縮
9.4 基于字典的壓縮(LZW)
9.4.1 LZW算法的偽代碼
9.4.2 LZW壓縮的實現
9.4.3 填滿字典
9.5 使用哪種壓縮方法
9.6 資源和參考資料
第10章 數據完整性和驗證
10.1 簡單的校驗和
10.2 加權校驗和
10.3 循環冗余校驗
10.3.1 CRC-CCITT
10.3.2 CRC-16
10.3.3 CRC-32
10.4 資源和參考資料