數據結構與面向對象程式設計(C 版)(第4版)

數據結構與面向對象程式設計(C 版)(第4版)

《數據結構與面向對象程式設計(c++版)(第4版)》不僅適合於作為計算機及相關專業“數據結構”和“c++面向對象程式設計”的教材,也是計算機軟體開發人員的常備參考書。

基本介紹

  • 書名:數據結構與面向對象程式設計(C 版)(第4版)
  • ISBN:9787302278818
  • 定價:89元
  • 出版社:清華大學出版社
  • 出版時間:2012年4月17日
  • 裝幀:平裝
內容簡介,圖書目錄,

內容簡介

本書是為計算機科學專業的第二門課程編寫的,在美國很多大學中稱之為CS2。本書的重點是規範說明、設計和實現,以及基本數據類型的使用,這些內容都將在第二學期的課程中介紹。而且,本書還介紹了很多重要的編程技術,提供了有關抽象技術、面向對象程式設計、算法的大O時間分析以及排序等內容。
本書假設學生已經完成了“計算機科學導論”和“程式設計”課程的學習,但本書也包括了在第一門課中沒有完全涵蓋的內容(如遞歸和指針)。本書使用的是C++語言,但對C++類的介紹是從零開始的,因此,對於那些以C而不是以C++作為程式設計入門語言的學生來說,本書也是適用的。根據筆者的經驗,這類學生需要對C++輸入和輸出技術(參見附錄F),以及C++參數類型(參見第2章)有所了解。當C程式設計師克服了有關輸入/輸出和參數的障礙後,就能領略C++的類和面向對象特性。需要指出的是,根據學生不同的知識背景,本書有多種不同的學習方案。對於那些有較強套用背景的學生來說,可以有選擇地學習本書的內容。

圖書目錄

第1章軟體開發的階段 1
1.1規範說明、設計與實現 2
1.1.1概念設計:問題分解 3
1.1.2前置條件與後置條件 4
1.1.3使用由其他程式設計師提供的
函式 6
1.1.4有關ANSI/ISOC++
標準的實現問題 8
1.1.5本節自測練習 11
1.2運行時間分析 12
1.2.1台階計數問題 12
1.2.2大O表示法 16
1.2.3C++函式的時間分析 17
1.2.4最壞情況、平均情況以及
最好情況下的時間分析 19
1.2.5本節自測練習 19
1.3測試與調試 20
1.3.1選擇測試數據 20
1.3.2邊界值 20
1.3.3完全代碼測試 21
1.3.4調試 21
1.3.5本節自測練習 22
1.4本章小結 22
本章自測練習參考答案 23
第2章抽象數據類型與C++類 25
2.1類與成員 25
2.1.1編程示例:節流閥類
throttle 25
2.1.2使用類 29
2.1.3throttle類的演示小程式 30
2.1.4實現成員函式 31
2.1.5可以調用其他成員的
成員函式 34
2.1.6本節自測練習 34
2.2構造函式 35
2.2.1throttle類的構造函式 35
2.2.2修訂throttle類的成員
函式 37
2.2.3內聯成員函式 38
2.2.4本節自測練習 39
2.3使用名稱空間、頭檔案與
實現檔案 39
2.3.1創建名稱空間 40
2.3.2頭檔案 40
2.3.3實現檔案 44
2.3.4使用名稱空間裡的數據項 46
2.3.5本節自測練習 48
2.4類與參數 49
2.4.1編程示例:point類 49
2.4.2參數默認值 52
2.4.3參數 53
2.4.4當函式的返回值的數據
類型為類時 58
2.4.5本節自測練習 59
2.5操作符重載 60
2.5.1二元比較操作符重載 60
2.5.2二元算術操作符重載 61
2.5.3輸入輸出操作符重載 62
2.5.4友元函式 64
2.5.5point類匯總 66
2.5.6操作符重載小結 68
2.5.7本節自測練習 69
2.6標準模板庫與pair類 69
2.7本章小結 70
本章自測練習參考答案 71
編程項目 73
第3章容器類 81
3.1bag類 81
3.1.1bag類的規範說明 81
3.1.2bag類的文檔說明 88
3.1.3bag類的演示程式 91
3.1.4bag類的設計 93
3.1.5類的不變式 94
3.1.6bag類的實現 95
3.1.7bag類的集成 101
3.1.8bag類的測試 104
3.1.9bag類的分析 105
3.1.10本節自測練習 106
3.2編程項目:sequence類 107
3.2.1sequence類的規範說明 107
3.2.2sequence類的文檔說明 111
3.2.3sequence類的設計 113
3.2.4sequence類的偽代碼實現 114
3.2.5本節自測練習 116
3.3互動式測試程式 116
本節自測練習 121
3.4STL中的multiset類及其疊代器 122
3.4.1multiset模板類 122
3.4.2multiset類的一些成員 123
3.4.3疊代器與[...)模式 123
3.4.4測試疊代器的相等性 126
3.4.5multiset類的其他操作符 126
3.4.6不合法的疊代器 126
3.4.7本節自測練習 128
3.5本章小結 128
本章自測練習參考答案 128
編程項目 131
第4章指針與動態數組 138
4.1指針與動態記憶體 138
4.1.1指針變數 139
4.1.2指針與賦值操作符一起
使用 140
4.1.3動態變數與new操作符 142
4.1.4使用new操作符為
動態數組分配記憶體 143
4.1.5記憶體堆與bad_alloc
異常 144
4.1.6delete操作符 145
4.1.7本節自測練習 147
4.2把指針與數組作為參數 147
4.2.1以指針作為值參數 147
4.2.2數組參數 149
4.2.3以指針或數組作為常量
參數 150
4.2.4以指針作為引用參數 152
4.2.5本節自測練習 153
4.3具有動態數組的bag類 156
4.3.1指針成員變數 156
4.3.2成員函式按需分配記憶體 157
4.3.3值語義 161
4.3.4析構函式 163
4.3.5修訂後的bag類定義 164
4.3.6修訂後的bag類實現 165
4.3.7修訂後的bag類集成 170
4.3.8本節自測練習 172
4.4有關動態類的說明 172
4.4.14條規則 173
4.4.2複製構造函式的特殊
重要性 173
4.4.3本節自測練習 174
4.5STL的string類與編程項目 174
4.5.1以null結尾的字元串 174
4.5.2初始化字元串變數 175
4.5.3空字元串 175
4.5.4讀寫字元串變數 175
4.5.5strcpy函式 176
4.5.6strcat函式 177
4.5.7strlen函式 177
4.5.8strcmp函式 178
4.5.9string類的規範說明 178
4.5.10string類的構造函式 180
4.5.11重載operator[] 181
4.5.12其他重載成員 181
4.5.13string類的其他操作 182
4.5.14string類的設計 182
4.5.15string類的實現 183
4.5.16string類的演示程式 185
4.5.17串聯輸出操作符 186
4.5.18聲明常量對象 187
4.5.19由構造函式產生的類型
轉換 187
4.5.20在表達式中使用
已重載的操作符 187
4.5.21本章設計的string類與C++
庫的string類 188
4.5.22本節自測練習 188
4.6編程項目:polynomial類 188
4.7本章小結 191
本章自測練習參考答案 192
編程項目 194
第5章鍊表 196
5.1鍊表的基本節點類 196
5.1.1為節點聲明類 196
5.1.2在鍊表節點中使用
typedef語句 197
5.1.3頭指針和尾指針 197
5.1.4空指針NULL 198
5.1.5頭指針或尾指針為NULL
的含義 199
5.1.6節點類構造函式 199
5.1.7節點類成員函式 200
5.1.8成員選擇操作符 201
5.1.9本節自測練習 204
5.2鍊表工具包 205
5.2.1鍊表工具包的頭檔案 205
5.2.2計算鍊表的長度 206
5.2.3鍊表的參數 209
5.2.4在鍊表頭插入新節點 210
5.2.5在非鍊表頭的其他位置
插入新節點 212
5.2.6在鍊表中查找節點 215
5.2.7根據節點的位置在鍊表中
尋找節點 217
5.2.8鍊表複製 218
5.2.9在鍊表頭刪除節點 221
5.2.10在非鍊表頭刪除節點 222
5.2.11清空鍊表 223
5.2.12鍊表工具包的集成 224
5.2.13使用鍊表工具包 228
5.2.14本節自測練習 228
5.3用鍊表實現bag類 229
5.3.1第3個bag類的規範
說明 229
5.3.2第3個bag類的類定義 230
5.3.3如何使bag類的value_
type與節點類的value_
type相匹配 233
5.3.4在類中使用動態記憶體
應遵循的規則 234
5.3.5第3個bag類的實現 234
5.3.6第3個bag類的集成 241
5.3.7本節自測練習 244
5.4編程項目:用鍊表實現
sequence類 244
5.4.1關於修訂後的sequence
類的設計建議 245
5.4.2關於修訂後的sequence
類的值語義 246
5.4.3本節自測練習 246
5.5動態數組、鍊表與雙向鍊表 246
5.5.1做出抉擇 248
5.5.2本節自測練習 249
5.6標準模板庫的vector、list和
deque類 249
本節測試練習 252
5.7本章小結 252
本章自測練習參考答案 252
編程項目 257
第6章用模板、疊代器和STL
進行軟體開發 261
6.1模板函式 261
6.1.1模板函式的語法 263
6.1.2使用模板函式 263
6.1.3交換兩個值的模板函式 265
6.1.4模板函式的參數匹配 266
6.1.5在數組中查找最大項
的模板函式 267
6.1.6在已排序數組中插入一個
數據項的模板函式 268
6.1.7本節自測練習 270
6.2模板類 270
6.2.1模板類的語法 270
6.2.2進一步了解模板類實現
檔案 277
6.2.3模板類成員函式的參數
匹配 278
6.2.4使用模板類 278
6.2.5詳細討論上一個演示
程式 281
6.2.6本節自測練習 282
6.3STL算法與疊代器的使用 282
6.3.1STL算法 282
6.3.2標準疊代器的類型 283
6.3.3數組的疊代器 285
6.3.4本節自測習題 285
6.4節點模板類 286
6.4.1返回引用類型的函式 287
6.4.2將引用返回值複製到
別處時會發生什麼 288
6.4.3這裡成員函式data
需要兩個版本 288
6.4.4新節點類的頭檔案和實現
檔案 289
6.4.5本節自測練習 297
6.5鍊表的疊代器 297
6.5.1節點疊代器 297
6.5.2從std::iterator派生
而來的節點疊代器 299
6.5.3節點疊代器的私有
成員變數 300
6.5.4節點疊代器的構造函式 300
6.5.5節點疊代器的*操作符 300
6.5.6節點疊代器兩個版本
的++操作符 300
6.5.7節點疊代器的相等和不相
等比較 302
6.5.8常量集合的疊代器 302
6.5.9本節自測練習 304
6.6含疊代器的鍊表版bag模板類 305
6.6.1如何為容器類提供
疊代器 305
6.6.2bag類疊代器 306
6.6.3將疊代器定義在bag
類中的原因 307
6.6.4本節自測練習 314
6.7本章小結與5個bag類的小結 314
本章自測練習答案 315
編程項目 318
第7章棧 320
7.1STL的stack類 320
7.1.1標準庫的stack類 321
7.1.2編程示例:翻轉單詞 322
7.1.3本節自測練習 323
7.2棧的套用 323
7.2.1編程示例:括弧的匹配 323
7.2.2編程示例:算術表達
式求值 325
7.2.3算術表達式求值的
規範說明 326
7.2.4算術表達式求值的設計 326
7.2.5算術表達式求值的實現 331
7.2.6計算器程式使用的函式 332
7.2.7算術表達式求值的
測試與分析 332
7.2.8算術表達式求值的改進 333
7.2.9本節自測練習 333
7.3stack類的實現 334
7.3.1棧的數組實現 334
7.3.2棧的鍊表實現 337
7.3.3Koenig查找 341
7.3.4本節自測練習 341
7.4更複雜的棧套用 342
7.4.1後綴表達式求值 342
7.4.2將中綴表示法轉換成後
綴表示法 344
7.4.3在中綴表達式中使用
優先權規則 346
7.4.4中綴轉換為後綴的
正確性 348
7.4.5本節自測練習 349
7.5本章小結 349
本章自測練習答案 350
編程項目 351
第8章佇列 356
8.1STL佇列 356
8.1.1標準庫的佇列類 357
8.1.2佇列的使用 358
8.1.3本節自測練習 359
8.2佇列的套用 359
8.2.1編程示例:識別回文 359
8.2.2本節自測練習 361
8.2.3編程示例:洗車模擬
程式 362
8.2.4洗車模擬程式的
規範說明 362
8.2.5洗車模擬程式的設計 362
8.2.6實現洗車類 365
8.2.7實現模擬函式 371
8.2.8本節自測練習 372
8.3佇列類的實現 373
8.3.1佇列的數組實現 373
8.3.2有關佇列中環形數組實現
的討論 377
8.3.3佇列的鍊表實現 379
8.3.4實現細節 380
8.3.5本節自測練習 384
8.4實現STL的雙端佇列 384
8.4.1為雙端佇列的value_type
項調用析構函式和構造
函式 387
8.4.2棧和佇列的其他變體 388
8.4.3本節自測練習 388
8.5棧、佇列和優先佇列類的引用
返回值 388
8.6本章小結 389
本章自測練習答案 389
編程項目 390
第9章遞歸思想 394
9.1遞歸函式 394
9.1.1遞歸思想的第一個例子 394
9.1.2跟蹤遞歸調用 396
9.1.3編程示例:write_vertical
的一個擴展 397
9.1.4深入分析遞歸 398
9.1.5成功遞歸函式的一般
形式 401
9.1.6本節自測練習 402
9.2遞歸的研究:分形和迷宮 402
9.2.1編程示例:產生隨機
分形 403
9.2.2產生隨機分形的函式及其
規範說明 404
9.2.3分形函式的設計和實現 405
9.2.4如何顯示隨機分形 407
9.2.5編程示例:穿越迷宮 407
9.2.6穿越迷宮函式的規範
說明 408
9.2.7穿越迷宮函式的設計 409
9.2.8穿越迷宮函式的實現 410
9.2.9運用回溯窮舉搜尋的
遞歸模式 412
9.2.10編程示例:玩具熊遊戲 413
9.2.11本節自測練習 414
9.3推導遞歸 415
9.3.1如何確保沒有無限遞歸 417
9.3.2歸納推導遞歸函式的
正確性 419
9.3.3本節自測練習 419
9.4本章小結 420
本章自測練習答案 420
編程項目 422
第10章樹 427
10.1樹的簡介 427
10.1.1二叉樹 427
10.1.2二叉分類樹 430
10.1.3一般樹 430
10.1.4本節自測練習 431
10.2樹的表示法 431
10.2.1完全二叉樹的數組
表示法 432
10.2.2使用節點類表示
二叉樹 433
10.2.3本節自測練習 434
10.3二叉樹節點類 435
10.3.1編程示例:猜測動物
程式 439
10.3.2猜測動物程式的
設計與實現 440
10.3.3猜測動物程式的
改進 448
10.3.4本節自測練習 448
10.4樹的遍歷 449
10.4.1二叉樹的遍歷 449
10.4.2從樹的節點中輸出
數據 453
10.4.3遍歷中的問題 454
10.4.4函式作為參數 454
10.4.5apply函式的一個
模板版本 456
10.4.6使apply模板函式
更具有通用性 457
10.4.7樹遍歷的模板函式 458
10.4.8本節自測練習 465
10.5二叉查找樹 466
10.5.1二叉查找樹存儲機制 466
10.5.2第6個bag類的定義 470
10.5.3第6個bag類的某些
簡單函式的實現 470
10.5.4計算某個元素在二叉
查找樹中出現的次數 471
10.5.5添加一個新元素到二叉
查找樹中 472
10.5.6從二叉查找樹中刪除
某個元素 473
10.5.7二叉查找樹的組合
操作符 475
10.5.8時間分析和疊代器 477
10.5.9本節自測練習 478
10.6本章小結 478
本章自測練習答案 479
編程項目 482
第11章平衡樹 487
11.1堆 487
11.1.1堆的存儲規則 487
11.1.2使用堆結構實現的
優先佇列 488
11.1.3插入新項 488
11.1.4刪除項 489
11.2STL優先佇列與堆算法 491
本節自測練習 492
11.3B樹 492
11.3.1非平衡樹的問題 493
11.3.2B樹的規則 493
11.3.3B樹的一個示例 495
11.3.4用B樹實現set類 495
11.3.5在B樹中查找項 499
11.3.6在B樹中插入項 501
11.3.7B樹的鬆散插入操作 501
11.3.8修正子節點多餘項
的私有成員函式 503
11.3.9回到成員函式
Insert 504
11.3.10採用自頂向下方法
設計 505
11.3.11從B樹中刪除項 505
11.3.12B樹的鬆散刪除
操作 506
11.3.13解決子節點項短缺
問題的私有成員
函式 508
11.3.14從B樹中刪除最大
的項 510
11.3.15外部B樹 512
11.3.16本節自測練習 512
11.4樹、日誌和時間分析 513
11.4.1二叉查找樹的時間
分析 513
11.4.2堆的時間分析 514
11.4.3對數運算 515
11.4.4對數級算法 516
11.4.5本節自測練習 516
11.5STL的map類和
multimap類 517
11.6本章小結 518
本章自測練習答案 518
編程項目 521
第12章查找 523
12.1順序查找和二叉查找 523
12.1.1順序查找 523
12.1.2順序查找的分析 523
12.1.3二叉查找 525
12.1.4二叉查找的設計 526
12.1.5二叉查找的分析 528
12.1.6標準庫的查找函式 531
12.1.7用於有序區間的函式 531
12.1.8用於無序區間的函式 532
12.1.9STL的search函式 533
12.1.10本節自測練習 534
12.2開地址散列 534
12.2.1散列簡介 534
12.2.2表類的聲明 536
12.2.3表類的設計 538
12.2.4表ADT的實現 541
12.2.5選擇散列函式來
減少衝突 547
12.2.6再散列減少聚類 547
12.2.7本節自測練習 548
12.3鏈式散列 549
本節自測練習 551
12.4散列的時間分析 551
12.4.1散列表的裝填因子 551
12.4.2本節自測練習 553
12.5程式設計:使用STL向量的
表類 553
12.5.1新表類 553
12.5.2在新表類中使用向量 554
12.5.3常量模板參數 554
12.5.4函式模板參數 554
12.5.5實現新表類 555
12.5.6本節自測練習 556
12.6TR1庫擴展中的散列表 556
12.7本章小結 557
本章自測練習答案 557
編程項目 561
第13章排序 563
13.1二次排序算法 563
13.1.1選擇排序的規範說明 563
13.1.2選擇排序的設計 563
13.1.3選擇排序的實現 565
13.1.4選擇排序的效率分析 567
13.1.5插入排序 569
13.1.6插入排序的效率分析 571
13.1.7本節自測練習 573
13.2遞歸排序算法 574
13.2.1使用遞歸的分治法 574
13.2.2歸併排序 576
13.2.3歸併函式 577
13.2.4動態記憶體在歸併排序中
的套用 581
13.2.5歸併排序的效率分析 582
13.2.6檔案的歸併排序 583
13.2.7快速排序 584
13.2.8partition函式 585
13.2.9快速排序的效率分析 588
13.2.10為快速排序選擇一個
好的基準元素 589
13.2.11本節自測練習 589
13.3使用堆的O(nlogn)算法 590
13.3.1堆排序 590
13.3.2構建堆 595
13.3.3向下重排 596
13.3.4堆排序的效率分析 597
13.3.5本節自測練習 598
13.4STL的排序與二叉查找 598
13.4.1原始C標準庫函式
qsort 598
13.4.2STL的排序函式 599
13.4.3STL的堆排序 600
13.4.4STL的二叉查找函式 600
13.4.5用於STL排序函式
的比較參數 601
13.4.6使用疊代器編寫一個
自己的排序函式 601
13.5本章小結 602
本章自測練習答案 603
編程項目 605
第14章派生類與繼承 610
14.1派生類 610
14.1.1如何聲明派生類 612
14.1.2派生類的自動構造
函式 613
14.1.3使用派生類 614
14.1.4派生類的自動賦值
操作符 615
14.1.5派生類的自動析構
函式 616
14.1.6覆蓋繼承的成員函式 616
14.1.7本節自測練習 617
14.2仿真生態系統 618
14.2.1實現部分生物對象層次 618
14.2.2organism類 618
14.2.3animal類:具有新私有
成員變數的派生類 621
14.2.4如何為派生類提供
新構造函式 622
14.2.5animal類的其他
成員函式 623
14.2.6本節自測練習 627
14.2.7herbivore類 628
14.2.8池塘生態仿真程式 630
14.2.9池塘生態系統的實現
細節 634
14.2.10使用池塘模型 634
14.2.11動態記憶體的使用 635
14.2.12本節自測練習 636
14.3虛擬成員函式和game類 636
14.3.1game類簡介 636
14.3.2受保護的成員 640
14.3.3虛擬成員函式 640
14.3.4虛擬析構函式 641
14.3.5game類的受保護
虛擬成員函式 641
14.3.6實現ConnectFour
遊戲的派生類 642
14.3.7connect4類的私有
成員變數 642
14.3.8connect4類的構造
函式和restart函式 644
14.3.9處理遊戲狀態的
三個函式 644
14.3.10處理移動的三個函式 645
14.3.11clone函式 646
14.3.12編寫派生自game
類的遊戲 646
14.3.13game類的play算法 647
14.3.14本節自測練習 650
14.4本章小結 650
進階閱讀 650
本章自測練習答案 651
編程項目 655
第15章圖 657
15.1圖的定義 657
15.1.1無向圖 657
15.1.2有向圖 660
15.1.3圖的更多術語 661
15.1.4航線的例子 661
15.1.5本節自測練習 662
15.2圖的實現 663
15.2.1使用鄰接矩陣表示圖 663
15.2.2使用二維數組
存儲鄰接矩陣 663
15.2.3使用邊列表表示圖 664
15.2.4使用邊集表示圖 665
15.2.5哪種表示方法最好 665
15.2.6編程示例:標籤圖類 665
15.2.7用於增加頂點和邊
的成員函式 666
15.2.8標籤圖類——重載
下標操作符 667
15.2.9下標操作符的常量
版本 668
15.2.10標籤圖類——函式
neighbors 668
15.2.11標籤圖類的實現 669
15.2.12本節自測練習 674
15.3圖的遍歷 674
15.3.1深度優先搜尋 675
15.3.2寬度優先搜尋 677
15.3.3深度優先搜尋的實現 679
15.3.4寬度優先搜尋的實現 680
15.3.5本節自測練習 682
15.4路徑算法 683
15.4.1判斷某條路徑是否
存在 683
15.4.2具有加權邊的圖 683
15.4.3最短距離算法 684
15.4.4最短路徑算法 691
15.4.5本節自測練習 691
15.5本章小結 692
本章自測練習答案 692
編程項目 693
附錄 697
附錄AASCII字元集 697
附錄B大O表達式 698
附錄C操作符的優先順序 700
附錄D命令行編譯和連結 701
附錄E使用老式編譯器 701
附錄FC++的輸入和輸出 701
附錄G選擇庫函式 708
附錄H標準模板類簡介 711
附錄I一些有用函式的工具包 720
附錄J基本風格指南 723
附錄K下載GNU編譯器和軟體 723
附錄L異常處理 724

相關詞條

熱門詞條

聯絡我們