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