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