數(shù)據(jù)結(jié)構(gòu)與算法教程
定 價:39 元
- 作者:唐寧九 ,游洪躍 ,孫界平 編
- 出版時間:2012/12/1
- ISBN:9787302280309
- 出 版 社:清華大學(xué)出版社
- 中圖法分類:TP311.12
- 頁碼:378
- 紙張:膠版紙
- 版次:1
- 開本:16開
《高等學(xué)校計算機課程規(guī)劃教材:數(shù)據(jù)結(jié)構(gòu)與算法教程(C++版)》合c++面向?qū)ο蟪绦蛟O(shè)計的特點,構(gòu)建了數(shù)據(jù)結(jié)構(gòu)與算法,書中的所有算法都在visualc++6.0、visualc++2005、visualc++2005express、dev-c++和mingwdeveloperstudio開發(fā)環(huán)境中進行了嚴(yán)格的測試,而且,在作者個人網(wǎng)頁上提供了大量的教學(xué)支持內(nèi)容。
《高等學(xué)校計算機課程規(guī)劃教材:數(shù)據(jù)結(jié)構(gòu)與算法教程(C++版)》共分11章,第1章是基礎(chǔ)知識,介紹基本概念及其術(shù)語,討論實用程序軟件包;第2章引入線性表;第3章介紹棧和隊列,用棧實現(xiàn)表達式求值;第4章介紹串,詳細討論串的存儲結(jié)構(gòu)與模式匹配算法;第5章介紹數(shù)組和廣義表,首次提出了廣義表的使用空間表存儲結(jié)構(gòu);第6章介紹樹結(jié)構(gòu),應(yīng)用哈夫曼編碼實現(xiàn)壓縮軟件;第7章介紹圖結(jié)構(gòu),實現(xiàn)圖的常用存儲結(jié)構(gòu),討論圖的相關(guān)應(yīng)用,并實現(xiàn)相應(yīng)算法;第8章介紹查找,討論靜態(tài)查找表、動態(tài)找查表與散列表,并實現(xiàn)了所有算法;第9章介紹排序,以簡潔方式實現(xiàn)各種排序算法;第10章介紹文件,討論各種常用文件結(jié)構(gòu);第11章介紹算法設(shè)計技術(shù)與算法分析技術(shù)。
《高等學(xué)校計算機課程規(guī)劃教材:數(shù)據(jù)結(jié)構(gòu)與算法教程(C++版)》在內(nèi)容組織上特別考慮了讀者的可接受性;在算法實現(xiàn)時,重點考慮了程序的可讀性;并且在習(xí)題、上機實驗或課程設(shè)計中進一步實現(xiàn)更強的功能。通過《高等學(xué)校計算機課程規(guī)劃教材:數(shù)據(jù)結(jié)構(gòu)與算法教程(C++版)》學(xué)習(xí),讀者不但能迅速提高數(shù)據(jù)結(jié)構(gòu)與算法的水平,還能提高c++程序設(shè)計的能力,經(jīng)過適當(dāng)?shù)倪x擇,《高等學(xué)校計算機課程規(guī)劃教材:數(shù)據(jù)結(jié)構(gòu)與算法教程(C++版)》可以作為數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)與算法分析、數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計、數(shù)據(jù)結(jié)構(gòu)與算法等課程的教材,《高等學(xué)校計算機課程規(guī)劃教材:數(shù)據(jù)結(jié)構(gòu)與算法教程(C++版)》可作為高等院校計算機及相關(guān)專業(yè)的教材,也可供其他從事軟件開發(fā)工作的讀者學(xué)習(xí)參考使用。
數(shù)據(jù)結(jié)構(gòu)與算法內(nèi)容豐富,技巧性強,包含了計算機科學(xué)與技術(shù)的許多重要方面,對學(xué)生的計算機軟件素質(zhì)的培養(yǎng)作用明顯。
本書采用C++面向?qū)ο蟮挠^點介紹數(shù)據(jù)結(jié)構(gòu)與算法,并使用模板程序設(shè)計技術(shù),與傳統(tǒng)采用面向過程的觀點相比優(yōu)勢較大,使所設(shè)計的程序更容易實現(xiàn)代碼重用,在提供通用性和靈活性的同時,又保證了效率。本書將面向?qū)ο蟪绦蛟O(shè)計的思想融合到數(shù)據(jù)結(jié)構(gòu)與算法中,讀者通過學(xué)習(xí)可進一步提高面向?qū)ο蟪绦蛟O(shè)計的能力。
全書共分為11章,第1章是基礎(chǔ)知識,介紹基本概念及其術(shù)語、抽象數(shù)據(jù)類型的實現(xiàn),還討論算法的概念和算法分析的簡單方法。作為預(yù)備知識,讀者應(yīng)具有一定的C++程序設(shè)計的基礎(chǔ)。但為了降低讀者的門檻,本章還介紹了要用到的C++的主要知識點,并介紹了實用程序軟件包。
第2章引入線性表,詳細討論線性表的順序存儲結(jié)構(gòu)與鏈?zhǔn)酱鎯Y(jié)構(gòu)。在討論鏈?zhǔn)酱鎯Y(jié)構(gòu)時,首先仿照傳統(tǒng)方法實現(xiàn)線性表,在此基礎(chǔ)之上,在鏈表結(jié)構(gòu)中保存當(dāng)前位置和元素個數(shù),這樣在難度增加不大的情況下提高了算法效率,使學(xué)生逐步體會改進算法的途徑與方法。
第3章介紹棧和隊列,討論棧和隊列的順序存儲結(jié)構(gòu)與鏈?zhǔn)酱鎯Y(jié)構(gòu),用棧實現(xiàn)表達式求值,通過學(xué)習(xí)能掌握各種棧和隊列的實現(xiàn)與使用方法,對后繼課程(如操作系統(tǒng)原理和編譯原理)的學(xué)習(xí)打下良好基礎(chǔ)。本章還討論了優(yōu)先隊列,使隊列應(yīng)用更加廣泛。
第4章介紹串,詳細討論串的存儲結(jié)構(gòu)與模式匹配算法,為開發(fā)串應(yīng)用軟件(如實現(xiàn)文本編輯軟件)打下堅實的基礎(chǔ)。
第5章介紹數(shù)組和廣義表,詳細討論數(shù)組、特殊矩陣、稀疏矩陣和廣義表的存儲結(jié)構(gòu)及實現(xiàn)方法,首次提出了廣義表的使用空間表存儲結(jié)構(gòu),并使用廣義表實現(xiàn)m元多項式的表示。
第6章介紹樹結(jié)構(gòu),討論了二叉樹、線索二叉樹、樹、森林及其哈夫曼樹的結(jié)構(gòu)及其實現(xiàn),還用哈夫曼編碼實現(xiàn)了壓縮軟件。
第7章介紹圖結(jié)構(gòu),實現(xiàn)圖的常用存儲結(jié)構(gòu),并討論圖的相關(guān)應(yīng)用,實現(xiàn)相應(yīng)算法(如求最小生成樹的Prim算法與Kruskal算法,求最短路徑的Dijkstra算法與Floyd算法).
第8章介紹查找,討論靜態(tài)查找表、動態(tài)查找表與散列表,還討論二叉排序樹、二叉平衡樹與B樹,并實現(xiàn)所有算法。
第9章介紹排序,以簡潔方式實現(xiàn)各種排序算法,還測試了各種排序算法的實際運行時間。
第10章介紹文件,討論主存儲器和輔助存儲器,以及各種常用文件結(jié)構(gòu),還特別介紹在數(shù)據(jù)庫中經(jīng)常采用的VSAM文件,對讀者研究與學(xué)習(xí)數(shù)據(jù)庫有一定的幫助。
第11章介紹算法設(shè)計技術(shù)與算法分析技術(shù),詳細討論各種算法設(shè)計技術(shù)的使用方法并實現(xiàn)了各種算法,并對算法分析技術(shù)進行深入淺出的討論。對讀者的算法設(shè)計和算法分析的理論和實踐都有極大的幫助。
對于初學(xué)者,要完全獨立編寫數(shù)據(jù)結(jié)構(gòu)與算法的代碼是相當(dāng)困難的,因此本書討論的數(shù)據(jù)結(jié)構(gòu)與算法都加以實現(xiàn)并進行了嚴(yán)格測試,提供了完整的測試程序,讀者可參考這些測試程序編寫相關(guān)算法,但如果只會使用已有的數(shù)據(jù)結(jié)構(gòu)編寫簡單的程序也不利于讀者對數(shù)據(jù)結(jié)構(gòu)與算法的深入理解,提高研究新數(shù)據(jù)結(jié)構(gòu)與算法的能力。因此本書的習(xí)題不但包括基本練習(xí)題,還包括仿照書中數(shù)據(jù)結(jié)構(gòu)構(gòu)造新數(shù)據(jù)結(jié)構(gòu)的題目,或改造已有算法的題目,這樣使讀者具有構(gòu)造新結(jié)構(gòu)及改造或改進算法的能力。
本書各章還提供了實例研究,這些實例研究包含教材基礎(chǔ)內(nèi)容的應(yīng)用(例如第4章的實例研究--文本編輯,第3章的實例研究--表達式求值等),也包含教材正文內(nèi)容的補充(例如第6章的實例研究--樹與等價關(guān)系)。實例研究主要提供給那些精力充沛的學(xué)生深入學(xué)習(xí)與研究,讀者通過對實例研究的學(xué)習(xí),可提高實際應(yīng)用數(shù)據(jù)結(jié)構(gòu)與算法的能力,雖然有一定的難度,但應(yīng)比讀者的想象更易學(xué)習(xí)與掌握。
為了盡快提高讀者的學(xué)習(xí)能力,本書各章還提供了深入學(xué)習(xí)導(dǎo)讀,包括本書作者實現(xiàn)相關(guān)數(shù)據(jù)結(jié)構(gòu)與算法的最原始思想的資料來源,也包括進一步學(xué)習(xí)的參考資料,極大地方便了讀者與教師查閱資料。
為了加強實踐教學(xué)的需要,本書的附錄中提供了實驗題目與課程設(shè)計項目,并提供了實驗報告格式與課程設(shè)計報告格式,以便學(xué)生在做數(shù)據(jù)結(jié)構(gòu)與算法的實驗與課程設(shè)計時選擇,也為教師提供了可供參考的實驗與課程設(shè)計的素材。
本教材在內(nèi)容組織上特別考慮了讀者的可接受性;在算法實現(xiàn)時,重點考慮程序的可讀性,教材基本內(nèi)容的算法一般選擇最簡單實現(xiàn)方式,學(xué)生容易接受;一般采用啟發(fā)的方式在習(xí)題、上機實驗或課程設(shè)計中進一步實現(xiàn)更強的功能,這樣容易培養(yǎng)起讀者的學(xué)習(xí)興趣,使讀者感到自己具有能發(fā)展或改進已有算法的能力,也會使讀者感到自己已具有計算機高手的實力。
本書的作者都活躍在教學(xué)研究第一線上,有的作者還具有深厚的數(shù)學(xué)功底,不但完成了所有算法的測試程序,還對算法分析的相關(guān)公式進行了嚴(yán)格的數(shù)學(xué)推理。
本書采用了模板程序設(shè)計技術(shù),模板技術(shù)已成為現(xiàn)代C++語言的風(fēng)格基礎(chǔ),C++98(1998年標(biāo)準(zhǔn)化的C++)提供的標(biāo)準(zhǔn)程序庫中有80%的成分是使用模板機制實現(xiàn)的STL(Standard Template Library,標(biāo)準(zhǔn)模板庫)。而國內(nèi)現(xiàn)階段教學(xué)并未重視C++的模板程序設(shè)計,書籍資料也不是很多。作者認(rèn)為在C++中,只要模仿本書算法,讀者會在不知不覺中就掌握了模板程序設(shè)計技巧。
現(xiàn)在來討論一下在國外數(shù)據(jù)結(jié)構(gòu)與算法教材中上機時喜歡采用的STL。實際上,STL是ATandT貝爾實驗室和HP研究實驗室的研究人員將模板程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計的原理結(jié)合起來,創(chuàng)造的一套研究數(shù)據(jù)結(jié)構(gòu)與算法的統(tǒng)一方法,現(xiàn)在已成為C++標(biāo)準(zhǔn)庫的一部分。STL提供了實現(xiàn)數(shù)據(jù)結(jié)構(gòu)的新途徑。它將(數(shù)據(jù))結(jié)構(gòu)(即組織數(shù)據(jù)的存儲結(jié)構(gòu))抽象為容器。通過使用模板和迭代器,STL庫使程序員能夠?qū)V泛的通用算法應(yīng)用到各種容器類上。通過本書作者的研究與了解,STL庫只覆蓋了數(shù)據(jù)結(jié)構(gòu)中的線性結(jié)構(gòu)和樹結(jié)構(gòu),并沒有覆蓋圖部分,因此,對數(shù)據(jù)結(jié)構(gòu)來講,STL庫并不完備,同時,如果讀者上機編程都只使用STL庫解決數(shù)據(jù)結(jié)構(gòu)的相關(guān)算法,可能使讀者在數(shù)據(jù)結(jié)構(gòu)編程方面,只會使用STL庫,而不能獨自設(shè)計新數(shù)據(jù)結(jié)構(gòu)。本書采用模板方法實現(xiàn)了所有書中的數(shù)據(jù)結(jié)構(gòu)算法,應(yīng)比STL庫更完備;同時STL庫中包含的源代碼可讀性差,不適合作為教學(xué)使用,本書的算法源程序首要強調(diào)可讀性,使讀者容易接受與模仿,并且可進行改進或修改算法實現(xiàn),因此在某種意義上講,本書提供的關(guān)于數(shù)據(jù)結(jié)構(gòu)與算法實現(xiàn)的類模板與函數(shù)模板是一種GTL (General Template Library)或OSGTL (Open Source General Template Library) ,讀者也可從作者個人主頁提供的軟件包(具體內(nèi)容見附錄B)來進行實際數(shù)據(jù)結(jié)構(gòu)與算法方面的軟件開發(fā);當(dāng)然,通過本書的學(xué)習(xí),再返回來學(xué)習(xí)STL庫的應(yīng)用,將會事半功倍,讀者只要找一本介紹STL的書籍或網(wǎng)上找一些介紹使用STL庫的文檔,并用STL庫試著編程即可完全掌握STL庫的使用。
特別要提一下有關(guān)C++編譯器的問題。在C++之外的任何編程語言中,編譯器都沒有受到過如此之重視,這是因為C++是一門非常復(fù)雜的語言,以致編譯器也難于構(gòu)造。下面介紹一些常用的優(yōu)秀C++編譯器。
Visual C++編譯器:由微軟開發(fā),現(xiàn)在主要流行Visual C++ 6.0、Visual C++ 2005以及Visual C++ 2005 Express,特點是集成開發(fā)環(huán)境用戶界面友好,信息提示準(zhǔn)確,調(diào)試方便,對模板支持最完善;Visual C++ 6.0對硬件環(huán)境要求低,現(xiàn)在安裝的機器最多,但對標(biāo)準(zhǔn)C++兼容只有83.43%, Visual C++ 2005與Visual C++ 2005 Express在軟件提示信息上做了進一步的優(yōu)化與改進,并且對標(biāo)準(zhǔn)C++兼容程度達到了98%以上,但對硬件的要求較高;還有Visual C++ 2005 Express是一種輕量級的Visual C++軟件,易于使用。對于編程愛好者、學(xué)生和初學(xué)者來說是很好的編程工具,微軟在2006年4月22日正式宣布 Visual Studio 2005 Express版永久免費。
GCC編譯器:著名的開源C++編譯器。是在UNIX操作系統(tǒng)(例如Linux)下編寫C++程序的首選,有非常好的可移植性,可以在非常廣泛的平臺上使用,也是編寫跨平臺、嵌入式程序很好的選擇。GCC 3.3與標(biāo)準(zhǔn)C++兼容程度大概能夠達到96.15%,F(xiàn)已有一些移植在Windows環(huán)境下使用GCC編譯器的IDE(集成開發(fā)環(huán)境),例如Dev-C++與MinGW Developer Studio,其中Dev-C++是能夠讓GCC在Windows下運行的集成開發(fā)環(huán)境,提供了與專業(yè)IDE相媲美的語法高亮、代碼提示與調(diào)試等功能;MinGW Developer Studio是跨平臺下的GCC集成開發(fā)環(huán)境。目前支持 Windows、Linux和 FreeBSD;根據(jù)作者的實際使用,感覺使用GCC編譯器的IDE錯誤信息提示的智能較低,錯誤提示不太準(zhǔn)確,還有就是對模板支持較差,對語法檢查較嚴(yán)格,有些在Visual C++編譯器中編譯通過的程序可能在GCC編譯器的IDE還會顯示有錯誤信息。
本書所有算法都同時在Visual C++ 6.0、Visual C++ 2005、Visual C++ 2005 Express、Dev-C++和MinGW Developer Studio中通過測試。讀者可根據(jù)實際情況選擇適當(dāng)?shù)木幾g器,建議選擇Visual C++ 6.0.
教師可采取多種方式來使用本書作為講授數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)與算法分析、數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計、數(shù)據(jù)結(jié)構(gòu)與算法等課程,應(yīng)該根據(jù)學(xué)生的背景知識以及課程的學(xué)時數(shù)來進行內(nèi)容的取舍。為滿足不同層次的教學(xué)需求,本教材使用了分層的思想,分層方法如下:沒加有星號*及雙星號**的部分是基本內(nèi)容,適合所有讀者學(xué)習(xí);加有星號的部分是適合計算機專業(yè)的讀者深入學(xué)習(xí)的選學(xué)部分;加有雙星號的部分適合于感興趣的同學(xué)研究,尤其適合于那些有志于ACM競賽的讀者加以深入研究。
作者為本書提供了全面的教學(xué)支持,如果在教學(xué)或?qū)W習(xí)過程中發(fā)現(xiàn)與本書有關(guān)的任何問題都可以與作者聯(lián)系:youhongyue168@gmail.com,作者將盡力滿足讀者的要求,并可能將解答公布在作者的教學(xué)網(wǎng)站http://teachhelp.changeip.net:9988/或http://teachhelp.3322.org:9988/上。在教學(xué)網(wǎng)站上還將提供如下內(nèi)容:
(1) 提供書中所有算法在Visual C++ 6.0、Visual C++2005、Visual C++2005 Express、Dev-C++和MinGW Developer Studio開發(fā)環(huán)境中的測試程序,今后還會提供當(dāng)時流行的C++開發(fā)環(huán)境的測試程序,每種開發(fā)環(huán)境還將提供基本開發(fā)過程的文檔;還提供本書作者開發(fā)的軟件包(包含所有本書所講的數(shù)據(jù)結(jié)構(gòu)與算法的類模板與函數(shù)模板).
(2) 提供教學(xué)用Power Point幻燈片ppt課件。
(3) 向教師提供所有習(xí)題、上機實驗題與課程設(shè)計項目的解答或參考程序;對學(xué)生來講,將在每學(xué)期期末(第15周~第20周)公布解壓碼。
(4) 數(shù)據(jù)結(jié)構(gòu)與算法問答專欄。
(5) 提供至少8套數(shù)據(jù)結(jié)構(gòu)與算法模擬試題及其解答,以供學(xué)生期末及考研復(fù)習(xí),也可供教師出考題時參考。
(6) 提供數(shù)據(jù)結(jié)構(gòu)與算法相關(guān)的其他資料(例如Dev-C++與MinGW Developer Studio軟件,流行免費C++編譯器的下載網(wǎng)址等).
希望各位能夠抽出寶貴的時間將你對本教材的建議或意見,當(dāng)然也可以發(fā)表對國內(nèi)外的數(shù)據(jù)結(jié)構(gòu)與算法課程教學(xué)的任何意見寄給作者,你的意見將是我們再版修訂教材的重要參考。
張衛(wèi)華、彭駿、譚斌、李培宇、何凱霖、姜琳、聶清彬、黃維、鄒昌文、王文昌、周焯華、胡開文、沈潔、周德華與歐陽等人對本書做了大量的工作,包括提供資料,調(diào)試算法,參與了部分內(nèi)容的編寫,在此特向他們表示感謝;作者還要感謝為本書提供直接或間接幫助的每一個朋友,由于你們熱情的幫助或鼓勵,激發(fā)了作者寫好本書的信心以及寫作熱情。
本書的出版要感謝清華大學(xué)出版社各位編輯及評審專家,由于他們?yōu)楸緯某霭鎯A注了大量熱情,也由于他們具有前瞻性的眼光才讓讀者有機會看到本書。
盡管作者有良好而負責(zé)任的嚴(yán)格態(tài)度,并做出了最大努力,但由于作者水平有限,書中難免有不妥之處,因此,敬請各位讀者不吝賜教,以便作者有一個提高的機會,并在再版時盡量采用你們的意見。
編 者2012年10月
第1章 緒論
1.1 數(shù)據(jù)結(jié)構(gòu)的概念和學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的必要性
1.2 數(shù)據(jù)結(jié)構(gòu)的基本概念
1.3 抽象數(shù)據(jù)類型及其實現(xiàn)
1.4 算法和算法分析
1.5 實用程序軟件包
1.6 深入學(xué)習(xí)導(dǎo)讀
1.7 習(xí)題
第2章 線性表
2.1 線性表的邏輯結(jié)構(gòu)
2.2 線性表的順序存儲結(jié)構(gòu)
2.3 線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)
2.4 實例研究: 一元多項式的表示
2.5 深入學(xué)習(xí)導(dǎo)讀
2.6 習(xí)題
第3章 棧和隊列
3.1 棧
3.2 隊列
3.3 實例研究: 表達式求值
3.4 深入學(xué)習(xí)導(dǎo)讀
3.5 習(xí)題
第4章 串
4.1 串類型的定義
4.2 字符串的實現(xiàn)
4.3 字符串模式匹配算法
4.4 實例研究: 文本編輯
4.5 深入學(xué)習(xí)導(dǎo)讀
4.6 習(xí)題
第5章 數(shù)組和廣義表
5.1 數(shù)組
5.2 矩陣
5.3 廣義表
5.4 深入學(xué)習(xí)導(dǎo)讀
5.5 習(xí)題
第6章 樹和二叉樹
第7章 圖
第8章 查找
第9章 排序
第10章 文件
第11章 算法設(shè)計與分析
參考文獻