出版時間:2009-1 出版社:清華大學出版社 作者:查爾茲 頁數(shù):401 譯者:張杰良
Tag標簽:無
前言
數(shù)據(jù)結構是計算機專業(yè)的一門重要的基礎課,在計算機科學各領域尤其是在軟件設計和開發(fā)中發(fā)揮著舉足輕重的作用。幾乎所有的計算機軟件系統(tǒng),例如,操作系統(tǒng)、編輯工具和編譯器等都要使用不同的數(shù)據(jù)結構。因此,數(shù)據(jù)結構是計算機專業(yè)的核心課程,是許多其他后續(xù)課程的重要基礎。目前,國內外有很多介紹數(shù)據(jù)結構方面的書籍,這些書籍都各具特色。但是大多數(shù)書籍都只注重于技術細節(jié),缺乏詳細的解釋說明,沒有數(shù)據(jù)結構基礎知識的讀者難以掌握理解??紤]到上述事實,本書作者從自己教學的實際需求出發(fā),根據(jù)自己對數(shù)據(jù)結構的理解,結合自己對數(shù)據(jù)結構的研究,考慮學生的學習需求,編寫了本書。本書由易到難,不僅詳細介紹了各種常見的數(shù)據(jù)結構,還提供了學習數(shù)據(jù)結構的基礎知識。讀者可以先閱讀基礎知識,再深入學習數(shù)據(jù)結構,通過這種安排方式,方便讀者的學習,加強概念的理解。本書采用當前流行的面向對象的C++語言來描述數(shù)據(jù)結構和算法,因為c++語言是程序員使用最廣泛的語言。但是,本書還考慮到目前編程語言的多樣性,在詳細闡述數(shù)據(jù)結構概念時盡量避免使用與語言相關的術語解釋,強調對概念的透徹理解,注重能力的培養(yǎng),使讀者能夠使用其他編程語言編寫出自己所需的數(shù)據(jù)結構。通過本書的學習,讀者不僅可以了解數(shù)據(jù)結構的基本概念和算法,還可以了解數(shù)據(jù)結構的應用場合;不僅可以使用數(shù)據(jù)結構,還可以根據(jù)需求設計自己的數(shù)據(jù)結構;不僅可以選擇高效的算法,還可以了解這樣做的原因。確切地說,本書內容全面豐富,語言精練簡潔,示例和練習的實踐性、針對性強,是一本優(yōu)秀的數(shù)據(jù)結構教材。
內容概要
這是一本適合于學生的C++數(shù)據(jù)結構指南,它基于現(xiàn)代軟件發(fā)展的現(xiàn)實和職業(yè)程序員的需求。本書首先從類的全面介紹入手,提供學生成功使用數(shù)據(jù)結構所需的基礎知識。接下來介紹了創(chuàng)建數(shù)據(jù)結構的方法,包括鏈表和可擴展/收縮的動態(tài)數(shù)組。解釋了時間復雜度對執(zhí)行速度的影響方式,幫助程序員理解關鍵性能之間的權衡考慮。然后以這些為基礎,從散列表到二叉搜索樹,詳細介紹了每一種常見的數(shù)據(jù)結構。本書還詳細設計了各種概念性的解釋,以幫助程序員使用任何現(xiàn)代程序語言。 本書可作為計算機類專業(yè)或信息類相關專業(yè)的本科或專科教材,也可供從事計算機工程與應用工作的科技工作者參考。 本書特色: 為每個關鍵的數(shù)據(jù)結構概念提供了清晰易懂的解釋 書中示例的設計綜合考慮速度、內存使用、可靠性和程序員方便性等諸方面的問題 每章后面還提供相關的練習,解決程序員實際編程過程中所面臨的富有針對性的問題 所有的例子都使用Visual C++2005編譯和測試,并且可以在Microsoft免費的Visual Studio 2005 Express Edition上運行。
作者簡介
Jeffrey S.Childs先生擁有美國揚斯敦州立大學計算機科學專業(yè)的學士學位以及肯特州立大學的計算機科學碩士和博士學位。他致力于圖像高斯分解的研究,撰寫并發(fā)表了多篇該領域的論文。他開發(fā)了Quickstep算法,該算法在時間復雜度上大大優(yōu)于現(xiàn)有的高斯分解算法。在過去的9年中,
書籍目錄
第1章 結構和類 1.1 結構 1.2 類的基本概念 1.3 類的實現(xiàn) 1.4 類的測試 1.5 將函數(shù)定義放在類定義中 1.6 類的注釋 1.7 結構和類之間的區(qū)別 1.8 小結 1.9 練習第2章 重載運算符、類模板和抽象 2.1 重載運算符 2.2 在Checkbook類中使用Check結構 2.3 類模板 2.4 類和抽象 2.5 小結 2.6 練習第3章 類的更多內容 3.1 const限定符 3.2 構造函數(shù) 3.3 類的修改 3.4 修改Checkbook類保存支票歷史記錄 3.5 小結 3.6 練習第4章 指針和動態(tài)數(shù)組 4.1 指針 4.2 〔〕運算符 4.3 動態(tài)分配內存 4.4 動態(tài)數(shù)組 4.5 delete操作符 4.6 對象指針 4.7 堆內存耗盡 4.8 可調數(shù)組 4.9 小結 4.10 練習第5章 Array類 5.1 Array類模板 5.2 使用ArraY類 5.3 析構函數(shù) 5.4 復制構造函數(shù) 5.5 重載賦值運算符函數(shù) 5.6 示例 5.7 Array類的優(yōu)缺點 5.8 標準模板庫 5.9 小結 5.10 練習第6章 面向對象編程簡介 6.1 組合 6.2 繼承 6.3 多態(tài) 6.4 小結 6.5 練習第7章 生成數(shù)據(jù)結構的方法 7.1 在數(shù)據(jù)結構中使用數(shù)組 7.2 鏈式結構簡介 7.3 鏈表編碼 7.3.1 鏈表代碼基礎 7.3.2 在鏈表中搜索一個肯定存在的值 7.3.3 在鏈表中搜索可能不存在的值 7.3.4 在鏈表的表頭插入一個結點 7.3.5 在鏈表中間插入一個結點 7.3.6 從鏈表中刪除一個包含鏈表中某個值的結點 7.3.7 使用header結點簡化代碼 7.3.8 刪除找到包含某值的結點 7.4 數(shù)組和鏈表的對比 7.4.1 數(shù)組和鏈表在速度上的比較 7.4.2 數(shù)組和鏈表在內存浪費上的比較 7.4.3 浪費內存分析 7.5 小結 7.6 練習第8章 棧和隊列 8.1 棧ADT 8.2 棧的數(shù)組實現(xiàn) 8.3 棧的鏈表實現(xiàn) 8.4 隊列ADT 8.5 隊列的鏈表實現(xiàn) 8.6 隊列的其他鏈表實現(xiàn) 8.7 隊列的數(shù)組實現(xiàn) 8.8 小結 8.9 練習第9章 時間復雜度簡介 9.1 時間復雜度基礎 9.2 常量階時間復雜度 9.3 大O表示法 9.4 對數(shù)階時間復雜度 9.5 折半搜索算法 9.6 計算機速度:它來源于什么地方 9.7 數(shù)據(jù)結構函數(shù)的時間復雜度 9.8 數(shù)組擴展和收縮的平攤分析 9.9 小結 9.10 練習第10章 鏈表作為數(shù)據(jù)結構 10.1 列表ADT 10.2 在信息記錄中使用關鍵碼值 10.3 鏈表實現(xiàn) 10.3.1 鏈表說明文件 10.3.2 鏈表實現(xiàn)文件 10.4 其他實現(xiàn) 10.5 小結 10.6 練習第11章 散列表 11.1 散列表ADT 11.2 散列函數(shù)和散列表設計 11.3 散列表的實現(xiàn)問題 11.4 函數(shù)指針 11.5 散列表實現(xiàn) 11.6 使用散列表實現(xiàn) 11.7 雙向鏈表的散列表實現(xiàn) 11.7.1 實現(xiàn)問題 11.7.2 DoublyLinkedList類的說明文件 11.7.3 DoublyLinkedList類的實現(xiàn)文件 11.8 小結 11.9 練習第12章 優(yōu)先級隊列、樹和堆 12.1 優(yōu)先級隊列ADT 12.2 優(yōu)先級隊列設計 12.3 樹 12.4 堆 12.5 使用單賦值交換 12.6 優(yōu)先級隊列的堆實現(xiàn)(基于數(shù)組) 12.7 鏈(內嵌)堆設計 12.8 優(yōu)先級隊列的鏈(內嵌)堆實現(xiàn) 12.9 小結 12.10 練習第13章 遞歸 13.1 遞歸階乘函數(shù) 13.2 遞歸函數(shù)編寫原則 13.3 在鏈式結構上使用遞歸 13.4 遞歸函數(shù)的時間復雜度 13.5 小結 13.6 練習第14章 排序算法簡介 14.1 堆排序 14.2 插入排序 14.3 快速排序 14.4 統(tǒng)計排序 14.5 鏈表排序 14.6 小結 14.7 練習第15章 其他數(shù)據(jù)結構 15.1 二叉搜索樹 15.2 BST和其他數(shù)據(jù)結構的對比 15.3 圖 15.4 鄰接矩陣和鄰接表之間的對比 15.5 小結 15.6 練習附錄A 如何編譯及使用多文件程序 A.1 Microsoft Visual Studio 2005 C++編譯器 A.2 編譯和運行使用類的代碼(不是類模板) A.3 編譯和運行使用類模板的代碼 A.4 使用Microsoft Visual Studio 2005編寫代碼 A.5 在Microsoft Visual Studio 2005中打開一個已創(chuàng)建的項目 A.6 何種情況下事情會變亂 A.7 UNIX編譯器
章節(jié)摘錄
插圖:第2-4行處理Mercedes結點是鏈表第一個結點的特殊情況。如果Mercedes結點是鏈表的第一個結點,那么由于第1行代碼,ptr早已指向它。我們只需在第3行中將start指針指向鏈表中的下一個結點即可,因為這個結點將成為鏈表的新表頭。然后,在第4行中,我們將第一個結點占用的內存空間釋放。注意這種特殊情況對于鏈表中只有一個結點的情況也適用。在這種情況下,指針start將在第3行中被賦予NULL。在第7行中,我們檢查下一個結點是否擁有Mercedes,但是并沒有將指針ptr指向這個結點。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載