出 版 說 明
信息時(shí)代早已顯現(xiàn)其誘人魅力,當(dāng)前幾乎每個(gè)人隨身都攜有多個(gè)媒體、信息和通信設(shè)備,享受其帶來的快樂和便宜。
我國高等教育早已進(jìn)入大眾化教育時(shí)代。而且計(jì)算機(jī)技術(shù)發(fā)展很快,知識更新速度也在快速增長,社會(huì)對計(jì)算機(jī)專業(yè)學(xué)生的專業(yè)能力要求也在不斷翻新。這就使得我國目前的計(jì)算機(jī)教育面臨嚴(yán)峻挑戰(zhàn)。我們必須更新教育觀念——弱化知識培養(yǎng)目的,強(qiáng)化對學(xué)生興趣的培養(yǎng),加強(qiáng)培養(yǎng)學(xué)生理論學(xué)習(xí)、快速學(xué)習(xí)的能力,強(qiáng)調(diào)培養(yǎng)學(xué)生的實(shí)踐能力、動(dòng)手能力、研究能力和創(chuàng)新能力。
教育觀念的更新,必然伴隨教材的更新。一流的計(jì)算機(jī)人才需要一流的名師指導(dǎo),而一流的名師需要精品教材的輔助,而精品教材也將有助于催生更多一流名師。名師們在長期的一線教學(xué)改革實(shí)踐中,總結(jié)出了一整套面向?qū)W生的獨(dú)特的教法、經(jīng)驗(yàn)、教學(xué)內(nèi)容等。本套叢書的目的就是推廣他們的經(jīng)驗(yàn),并促使廣大教育工作者更新教育觀念。
在教育部相關(guān)教學(xué)指導(dǎo)委員會(huì)專家的幫助和指導(dǎo)下,在各大學(xué)計(jì)算機(jī)院系領(lǐng)導(dǎo)的協(xié)助下,清華大學(xué)出版社規(guī)劃并出版了本系列教材,以滿足計(jì)算機(jī)課程群建設(shè)和課程教學(xué)的需要,并將各重點(diǎn)大學(xué)的優(yōu)勢專業(yè)學(xué)科的教育優(yōu)勢充分發(fā)揮出來。
本系列教材行文注重趣味性,立足課程改革和教材創(chuàng)新,廣納全國高校計(jì)算機(jī)優(yōu)秀一線專業(yè)名師參與,從中精選出佳作予以出版。
本系列教材具有以下特點(diǎn)。
1. 有的放矢
針對計(jì)算機(jī)專業(yè)學(xué)生并站在計(jì)算機(jī)課程群建設(shè)、技術(shù)市場需求、創(chuàng)新人才培養(yǎng)的高度,規(guī)劃相關(guān)課程群內(nèi)各門課程的教學(xué)關(guān)系,以達(dá)到教學(xué)內(nèi)容互相銜接、補(bǔ)充、相互貫穿和相互促進(jìn)的目的。各門課程功能定位明確,并去掉課程中相互重復(fù)的部分,使學(xué)生既能夠掌握這些課程的實(shí)質(zhì)部分,又能節(jié)約一些課時(shí),為開設(shè)社會(huì)需求的新技術(shù)課程準(zhǔn)備條件。
2. 內(nèi)容趣味性強(qiáng)
按照教學(xué)需求組織教學(xué)材料,注重教學(xué)內(nèi)容的趣味性,在培養(yǎng)學(xué)習(xí)觀念、學(xué)習(xí)興趣的同時(shí),注重創(chuàng)新教育,加強(qiáng)“創(chuàng)新思維”,“創(chuàng)新能力”的培養(yǎng)、訓(xùn)練;強(qiáng)調(diào)實(shí)踐,案例選題注重實(shí)際和興趣度,大部分課程各模塊的內(nèi)容分為基本、加深和拓寬內(nèi)容3個(gè)層次。
3. 名師精品多
廣羅名師參與,對于名師精品,予以重點(diǎn)扶持,教輔、教參、教案、PPT、實(shí)驗(yàn)大綱和實(shí)驗(yàn)指導(dǎo)等配套齊全,資源豐富。同一門課程,不同名師分出多個(gè)版本,方便選用。
4. 一線教師親力
專家咨詢指導(dǎo),一線教師親力;內(nèi)容組織以教學(xué)需求為線索;注重理論知識學(xué)習(xí),注重學(xué)習(xí)能力培養(yǎng),強(qiáng)調(diào)案例分析,注重工程技術(shù)能力鍛煉。
經(jīng)濟(jì)要發(fā)展,國力要增強(qiáng),教育必須先行。教育要靠教師和教材,因此建立一支高水平的教材編寫隊(duì)伍是社會(huì)發(fā)展的關(guān)鍵,特希望有志于教材建設(shè)的教師能夠加入到本團(tuán)隊(duì)。通過本系列教材的輻射,培養(yǎng)一批熱心為讀者奉獻(xiàn)的編寫教師團(tuán)隊(duì)。
清華大學(xué)出版社前言
“數(shù)據(jù)結(jié)構(gòu)與算法”課程涉及的內(nèi)容十分豐富,包含了計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的許多重要知識,許多分析、解決問題的方法新穎,技巧性強(qiáng),對學(xué)生計(jì)算機(jī)軟件素質(zhì)的培養(yǎng)作用明顯。為培養(yǎng)、訓(xùn)練學(xué)生選用合適的數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)方法編寫質(zhì)量高、風(fēng)格好的應(yīng)用程序,學(xué)生需要不斷地進(jìn)行編程實(shí)踐,將實(shí)驗(yàn)與課程設(shè)計(jì)實(shí)踐環(huán)節(jié)與理論教學(xué)相融合,通過實(shí)踐教學(xué)促進(jìn)數(shù)據(jù)結(jié)構(gòu)與算法理論知識的學(xué)習(xí),有效提高教學(xué)效果和教學(xué)水平。
本書是游洪躍、唐寧九主編,清華大學(xué)出版社出版的《數(shù)據(jù)結(jié)構(gòu)與算法(C++版)(第2版)》(ISBN 9787302557746,后面簡稱為主教材)的配套教材。全書分為3部分,具體如下。
第1部分總結(jié)了主教材所述的數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)知識。主要目的是幫助讀者回顧所學(xué)知識,順利完成后續(xù)的實(shí)驗(yàn)與課程設(shè)計(jì)。
第2部分包含了22個(gè)實(shí)驗(yàn)。這些實(shí)驗(yàn)題目包括了主教材正文內(nèi)容的不同實(shí)現(xiàn)方式(例如實(shí)現(xiàn)不帶頭節(jié)點(diǎn)形式的單鏈表),包括了對主教材內(nèi)容的改進(jìn)(例如對主教材的哈夫曼樹類模板的方法EnCode加以改進(jìn),將查找字符位置通過指向函數(shù)的指針來實(shí)現(xiàn)),包括了對主教材算法的優(yōu)化(例如用賦值語句代替交換兩個(gè)數(shù)據(jù)元素的方法,來優(yōu)化快速排序算法與堆排序),包括了對主教材算法的改造與提高(例如改進(jìn)最小生成樹的Kruskal算法),還包括了數(shù)據(jù)結(jié)構(gòu)與算法的有趣應(yīng)用(例如要求在一個(gè)n×n的棋盤上放置n個(gè)皇后并且放置的n個(gè)皇后不會(huì)互相吃掉),通過實(shí)驗(yàn)極大提高讀者數(shù)據(jù)結(jié)構(gòu)與算法的應(yīng)用能力。每個(gè)實(shí)驗(yàn)都包括目的與要求、工具及準(zhǔn)備工作、實(shí)驗(yàn)分析、實(shí)驗(yàn)步驟、測試與結(jié)論以及思考與感悟幾部分。實(shí)驗(yàn)給出了具體操作步驟以及具體、實(shí)用的指導(dǎo),讓初學(xué)者面對實(shí)驗(yàn)題目不會(huì)束手無策。希望讀者通過實(shí)驗(yàn)?zāi)軌驅(qū)W有所思,得到啟迪與感悟。
第3部分包含了11個(gè)課程設(shè)計(jì)項(xiàng)目。簡單的項(xiàng)目可以一個(gè)人單獨(dú)完成,復(fù)雜的項(xiàng)目可由幾個(gè)人共同完成。這些項(xiàng)目包括對主教材中實(shí)例研究的改進(jìn)(例如從鍵盤上輸入中綴算術(shù)表達(dá)式,包括括號,計(jì)算出表達(dá)式的值),包括接近實(shí)際課題的項(xiàng)目(例如采用哈夫曼算法開發(fā)一個(gè)壓縮軟件,以及采用圖的知識開發(fā)公園導(dǎo)游系統(tǒng)),包括容易引起讀者興趣的項(xiàng)目(例如詞典變位詞檢索系統(tǒng)),還包括開拓學(xué)生視野的項(xiàng)目(例如用具有自學(xué)習(xí)功能的專家系統(tǒng)思想實(shí)現(xiàn)《動(dòng)物游戲》的開發(fā))。課程設(shè)計(jì)項(xiàng)目一般都提供功能的擴(kuò)展方法,基礎(chǔ)較差的讀者可只實(shí)現(xiàn)基礎(chǔ)功能,對數(shù)據(jù)結(jié)構(gòu)與算法有興趣的讀者可實(shí)現(xiàn)更強(qiáng)的功能,這樣使不同層次的讀者都會(huì)有所收獲。讀者通過做這些項(xiàng)目能快速提高解決實(shí)際問題的能力。每個(gè)項(xiàng)目都給出了分析與實(shí)現(xiàn)方法,還給出了一些改進(jìn)建議,讀者可以在完成基本任務(wù)的前提下,對程序加以改進(jìn)和提高。
本書所有實(shí)驗(yàn)與課程設(shè)計(jì)都在Visual C++ 6.0、Visual C++ 2017、DevC++ v5.11和CodeBlocks v16.01中通過測試。
為滿足不同層次的教學(xué)需求,本教材使用了分層的思想,分層方法如下: 沒加星號“”及“”的部分是基本內(nèi)容,適合所有讀者學(xué)習(xí);加有星號“”的部分是適合計(jì)算機(jī)專業(yè)的讀者深入學(xué)習(xí)的選學(xué)部分;加有兩個(gè)星號“”的部分適合感興趣的同學(xué)研究,尤其適合那些準(zhǔn)備參加ACM競賽的讀者加以深入研究。作者為本書提供了全面的教學(xué)支持,讀者可在清華大學(xué)出版社官網(wǎng)的本書頁面下載如下教學(xué)資源。
(1) 本書作者開發(fā)軟件包(包含所有本書所講的數(shù)據(jù)結(jié)構(gòu)與算法的類模板與函數(shù)模板)。
(2) 全書所有實(shí)驗(yàn)與課程設(shè)計(jì)的在Visual C++ 6.0、Visual C++ 2017、DevC++ v5.11和CodeBlocks v16.01開發(fā)環(huán)境中的測試程序。
(3) 數(shù)據(jù)結(jié)構(gòu)與算法相關(guān)的其他資料(例如DevC++v5.11與CodeBlocks v16.01軟件等開源C++編譯器)。
通過掃描二維碼可觀看全書所有實(shí)驗(yàn)與課程設(shè)計(jì)的測試程序演示視頻,其中第1個(gè)二維碼對應(yīng)Visual C++ 6.0開發(fā)環(huán)境的測試程序演示視頻,第2個(gè)二維碼對應(yīng)VisualC++ 2017開發(fā)環(huán)境的測試程序演示視頻,第3個(gè)二維碼對應(yīng)DevC++ v5.11開發(fā)環(huán)境的測試程序演示視頻,第4個(gè)二維碼對應(yīng)CodeBlocks v16.01開發(fā)環(huán)境的測試程序演示視頻。
在附錄D中介紹Visual C++ 6.0、Visual C++ 2017、DevC++ v5.11和CodeBlocks v16.01開發(fā)環(huán)境建立工程的步驟,可通過掃描二維碼觀看具體操作視頻。
程艷紅、袁平、陳良銀、游倩、張銀、文芝明等人對本書做了大量的工作,包括提供資料,調(diào)試算法,參與了部分內(nèi)容的編寫,在此特向他們表示感謝;作者還要感謝為本書提供直接或間接幫助的每一個(gè)朋友,由于你們的熱情幫助和鼓勵(lì),才激發(fā)了作者寫好本書的信心和寫作熱情。
本書的出版要感謝清華大學(xué)出版社的相關(guān)編校人員大力支持,由于他們?yōu)楸緯某霭鎯A注了大量熱情,也由于他們的前瞻性眼光,才讓讀者有機(jī)會(huì)看到本書。
盡管作者有認(rèn)真負(fù)責(zé)的態(tài)度,并做了最大努力,但由于作者水平有限,書中難免出現(xiàn)不妥之處,敬請各位讀者不吝賜教,以便及時(shí)修正,提高本書的水準(zhǔn)。
作者2020年9月
目錄
第1部分基 礎(chǔ) 知 識
第1章緒論3
1.1數(shù)據(jù)結(jié)構(gòu)的基本概念3
1.2算法和算法分析4第2章線性表6
2.1線性表的邏輯結(jié)構(gòu)6
2.2線性表的順序存儲結(jié)構(gòu)7
2.3線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)7第3章棧和隊(duì)列9
3.1棧9
3.2隊(duì)列10
3.3優(yōu)先隊(duì)列12第4章串13
4.1串類型的定義13
4.2字符串模式匹配算法13第5章數(shù)組和廣義表16
5.1數(shù)組16
5.2矩陣17
5.3廣義表19第6章樹和二叉樹22
6.1樹的基本概念22
6.2二叉樹23
6.3二叉樹遍歷25
6.4線索二叉樹26
6.5樹和森林的實(shí)現(xiàn)27
6.6哈夫曼樹與哈夫曼編碼32
6.7樹的計(jì)數(shù)33第7章圖35
7.1圖的定義和術(shù)語35
7.2圖的存儲表示38
7.3圖的遍歷40
7.4連通無向網(wǎng)的最小代價(jià)生成樹40
7.5有向無環(huán)圖及應(yīng)用41
7.6最短路徑41第8章查找43
8.1查找的基本概念43
8.2靜態(tài)查找表43
8.3動(dòng)態(tài)查找表43
8.4哈希表47第9章排序50
9.1概述50
9.2插入排序51
9.3交換排序51
9.4選擇排序51
9.5歸并排序52
9.6基數(shù)排序52
9.7外部排序53
第10章文件55
10.1主存儲器和輔助存儲器55
10.2各種常用文件結(jié)構(gòu)55
第11章算法設(shè)計(jì)與分析56
11.1算法設(shè)計(jì)56
11.2算法分析58
第2部分實(shí)驗(yàn)
實(shí)驗(yàn)1石頭、剪刀、布61
實(shí)驗(yàn)221點(diǎn)70
實(shí)驗(yàn)3不帶頭節(jié)點(diǎn)形式的單鏈表80
實(shí)驗(yàn)4任意大非負(fù)整數(shù)的任意大非負(fù)整數(shù)次方93
實(shí)驗(yàn)5病人就醫(yī)管理102
實(shí)驗(yàn)6利用后綴表達(dá)式計(jì)算中綴表達(dá)式的值107
實(shí)驗(yàn)7文本串的加密115
實(shí)驗(yàn)8改造串類120
實(shí)驗(yàn)9螺旋方陣130
實(shí)驗(yàn)10引用數(shù)使用空間表法廣義表存儲結(jié)構(gòu)134
實(shí)驗(yàn)11用二叉樹表示表達(dá)式147
實(shí)驗(yàn)12改進(jìn)哈夫曼樹類153
實(shí)驗(yàn)13求最小生成樹的Kruskal的算法改進(jìn)161
實(shí)驗(yàn)14圖的根頂點(diǎn)166
實(shí)驗(yàn)15鏈地址法處理沖突的哈希表170
實(shí)驗(yàn)16字符統(tǒng)計(jì)177
實(shí)驗(yàn)17改造快速排序算法181實(shí)驗(yàn)18改造基數(shù)排序算法186
實(shí)驗(yàn)19學(xué)生基本信息管理193
實(shí)驗(yàn)20電話號碼的查找205
實(shí)驗(yàn)21農(nóng)夫過河問題216
實(shí)驗(yàn)22n皇后問題225
第3部分課 程 設(shè) 計(jì)
項(xiàng)目1算術(shù)表達(dá)式求值233
項(xiàng)目2停車場管理系統(tǒng)237
項(xiàng)目3電話客戶服務(wù)模擬器244
項(xiàng)目4簡單文本編輯器250項(xiàng)目5壓縮軟件260
項(xiàng)目6排課軟件271
項(xiàng)目7公園導(dǎo)游系統(tǒng)282
項(xiàng)目8理論計(jì)算機(jī)科學(xué)家族譜的文檔/視圖模式288
項(xiàng)目9動(dòng)物游戲296
項(xiàng)目10簡單個(gè)人圖書管理系統(tǒng)302
項(xiàng)目11詞典變位詞檢索系統(tǒng)311
參考文獻(xiàn)316
附錄A本書配套軟件包318
附錄B實(shí)驗(yàn)報(bào)告格式324
附錄C課程設(shè)計(jì)報(bào)告格式325
附錄D流行C++開發(fā)環(huán)境的使用方法326