本書從抽象思想、問題解決以及C編程語言使用的觀點介紹了數據結構和算法。本書中包含了C的最新特性,任何地方都可以完全使用標準模板庫(STL)。C允許程序員分開編寫接口和實現,將它們保存在單獨編譯的文件中,并隱藏實現的具體細節(jié)。本書深入了一層:數據結構的接口和實現在本書的不同部分討論。第一部分(對象和C)、第二部分(算法和構建塊)、第三部分(應用程序)打基礎,專門討論各種基本概念并提供實踐中的一些例子。第四部分(實現)介紹數據結構的實現。接口與實現的這種分離促進了抽象思想。將類接口放在實現之前編寫與使用,這就迫使讀者去思考各種數據結構的功能性和潛能(例如,在實現優(yōu)先隊列之前就使用它了)。特色:加入了C最新的發(fā)展,包含一個有關模型的新章節(jié),并且從頭到尾都使用了vector類。包含在恰當時使用了STL的修訂材料。介紹高級使用C較重要的細節(jié)的同時,介紹了類和繼承(這兩者簡化了最初的表示法)的一些新內容。闡述了數據結構的STL接口,并提供了STL實現,同時也提供了不使用STL的簡化過的接口,這使得理解數據結構的基礎知識更加簡單,沒有了STL的復雜性。包含大量的代碼。這些都已被全面重寫并測試過,可兼容當前各種各樣的編譯器。本書前言序言本書是為計算機科學專業(yè)的第2學期的課程而編寫的,從典型的《數據結構》(CS-2,即計算機科學專業(yè)第2學期)開始直到高級的數據結構和算法分析。CS-2課程的內容經歷過一段時間的演變。盡管多數人都同意這樣的主題安排,但在具體的細節(jié)上還是有較大的分歧。獲得一致認可的主題是軟件開發(fā)的原則,最突出的是封裝和信息隱藏的概念。理論上,所有的CS-2課程都傾向于包含運行時分析、遞歸、基本的排序方法和初等數據結構。許多大學還開設了高級課程,主題涉及到高級的數據結構、算法、運行時分析。本書中的材料設計同時考慮到這兩種級別,因此讀者不必再另外購買其他教科書。盡管如此,爭論最激烈的還是CS-2中編程語言的選擇以及其他幾項必要的基本選擇,包括:是否這么早就介紹面向對象的設計或基于對象的設計。對數學水平的要求。在實現數據結構及其使用之間達到恰當的平衡點,以及與所選語言相關的編程細節(jié)。筆者寫本書的目的是,從抽象思維和問題求解的角度來介紹數據結構和算法。筆者試圖覆蓋所有與數據結構、分析及其C實現有關的重要內容,同時對那些理論上似乎很有意義但實際上很少使用的數據結構,則是避而遠之。幾乎不可能有哪本書能像本書一樣在一門課程里講述所有不同的數據結構,包括數據結構的使用。因此,筆者設計了本教材,以便讓教師能夠靈活地選擇主題。教師需要在實踐和理論之間尋求平衡,然后選擇最適合課程需要的主題。正如此序言后面所討論的那樣,筆者對課本進行了細致的組織,盡可能地降低了各章之間的依賴性。統(tǒng)一的方法筆者的基本假設是基于任何語言的軟件開發(fā)工具都有一個龐大的庫,許多數據結構就是這些庫的一部分。筆者預感到數據結構教學的重心將從實現轉向使用。在本書中,筆者采用了一套獨特的方法,將數據結構分成規(guī)范和實現,并充分利用已有的數據結構庫,即標準模板庫(StandardTemplateLibrary,STL)。在第二部分將會有一章(第7章)單獨講述適合大多數應用程序的STL子集。第二部分還講述了基本的分析技術、遞歸和排序。第三部分介紹使用STL數據結構的應用程序。直到第四部分已經使用數據結構之后,才開始介紹STL的實現。因為STL是C的一部分(較早的編譯器則使用本教材中的STL代碼,請參閱稍后的"代碼可用性"部分),學生可以使用現有的軟件組件來設計大型項目。盡管本書中大量使用了STL,但本書并非針對STL的專著,也不是專門講述STL實現的入門讀物。本書的重點在于數據結構和基本的問題求解技術。當然,數據結構設計中使用的技術大都適用于STL的實現,因此在第四部分有幾章介紹了STL的實現。然而,教師可以選擇第四部分中較簡單的實現,而不必討論STL協(xié)議。第7章介紹了STL,這對理解第三部分的代碼很有必要。筆者只是使用了一些基本的STL。許多教師更喜歡定義、實現,然后使用每個數據結構的傳統(tǒng)方法。由于第三部分和第四部分中的材料之間并不存在依賴關系,因此可以利用本書輕松地教授傳統(tǒng)方法。預備技能閱讀本書的學生應該了解一門面向對象或面向過程的編程語言。必須了解編程語言的基本特征,包括基元數據類型、運算符、控制結構、函數(方法)、輸入和輸出(但并不需要了解數組和類)。已初步接觸過C或Java的學生可能會覺得前兩章的某些內容很簡單。但其他部分所講的C技術細節(jié)則相對比較深奧,在入門課程中可能不會講到這些知識。學習了其他語言課程的學生應該從第1章開始學習,并且應該仔細研讀。還應該查閱附錄A,因為附錄A中討論了某些專屬于C的語言問題。如果喜歡同時參閱一本C參考書,可以參考第1章中給出的推薦書目。離散數學方面的知識對學習本書很有幫助,但并非絕對必要。本書給出了幾個數學證明,但對于更復雜的證明,則提示讀者復習有關的數學知識。第8章以及第19~24章需要具備一定程度的數學技能。教師可以輕松地選擇跳過數學證明,而只介紹證明結果。本書中所有的數學證明都被清晰地標出來了,并與本書正文部分分開。