出 版 說 明
信息時代早已顯現(xiàn)其誘人魅力,當前幾乎每個人隨身都攜有多個媒體、信息和通信設備,享受其帶來的快樂和便宜。
我國高等教育早已進入大眾化教育時代。而且計算機技術發(fā)展很快,知識更新速度也在快速增長,社會對計算機專業(yè)學生的專業(yè)能力要求也在不斷翻新。這就使得我國目前的計算機教育面臨嚴峻挑戰(zhàn)。我們必須更新教育觀念——弱化知識培養(yǎng)目的,強化對學生興趣的培養(yǎng),加強培養(yǎng)學生理論學習、快速學習的能力,強調培養(yǎng)學生的實踐能力、動手能力、研究能力和創(chuàng)新能力。
教育觀念的更新,必然伴隨教材的更新。一流的計算機人才需要一流的名師指導,而一流的名師需要精品教材的輔助,而精品教材也將有助于催生更多一流名師。名師們在長期的一線教學改革實踐中,總結出了一整套面向學生的獨特的教法、經驗、教學內容等。本套叢書的目的就是推廣他們的經驗,并促使廣大教育工作者更新教育觀念。
在教育部相關教學指導委員會專家的幫助和指導下,在各大學計算機院系領導的協(xié)助下,清華大學出版社規(guī)劃并出版了本系列教材,以滿足計算機課程群建設和課程教學的需要,并將各重點大學的優(yōu)勢專業(yè)學科的教育優(yōu)勢充分發(fā)揮出來。
本系列教材行文注重趣味性,立足課程改革和教材創(chuàng)新,廣納全國高校計算機優(yōu)秀一線專業(yè)名師參與,從中精選出佳作予以出版。
本系列教材具有以下特點。
1. 有的放矢
針對計算機專業(yè)學生并站在計算機課程群建設、技術市場需求、創(chuàng)新人才培養(yǎng)的高度,規(guī)劃相關課程群內各門課程的教學關系,以達到教學內容互相銜接、補充、相互貫穿和相互促進的目的。各門課程功能定位明確,并去掉課程中相互重復的部分,使學生既能夠掌握這些課程的實質部分,又能節(jié)約一些課時,為開設社會需求的新技術課程準備條件。
2. 內容趣味性強
按照教學需求組織教學材料,注重教學內容的趣味性,在培養(yǎng)學習觀念、學習興趣的同時,注重創(chuàng)新教育,加強“創(chuàng)新思維”,“創(chuàng)新能力”的培養(yǎng)、訓練;強調實踐,案例選題注重實際和興趣度,大部分課程各模塊的內容分為基本、加深和拓寬內容3個層次。
3. 名師精品多
廣羅名師參與,對于名師精品,予以重點扶持,教輔、教參、教案、PPT、實驗大綱和實驗指導等配套齊全,資源豐富。同一門課程,不同名師分出多個版本,方便選用。
4. 一線教師親力
專家咨詢指導,一線教師親力;內容組織以教學需求為線索;注重理論知識學習,注重學習能力培養(yǎng),強調案例分析,注重工程技術能力鍛煉。
經濟要發(fā)展,國力要增強,教育必須先行。教育要靠教師和教材,因此建立一支高水平的教材編寫隊伍是社會發(fā)展的關鍵,特希望有志于教材建設的教師能夠加入到本團隊。通過本系列教材的輻射,培養(yǎng)一批熱心為讀者奉獻的編寫教師團隊。
清華大學出版社前言
“數據結構與算法”課程涉及的內容十分豐富,包含了計算機科學與技術專業(yè)的許多重要知識,許多分析、解決問題的方法新穎,技巧性強,對學生計算機軟件素質的培養(yǎng)作用明顯。為培養(yǎng)、訓練學生選用合適的數據結構與算法設計方法編寫質量高、風格好的應用程序,學生需要不斷地進行編程實踐,將實驗與課程設計實踐環(huán)節(jié)與理論教學相融合,通過實踐教學促進數據結構與算法理論知識的學習,有效提高教學效果和教學水平。
本書是游洪躍、唐寧九主編,清華大學出版社出版的《數據結構與算法(C++版)(第2版)》(ISBN 9787302557746,后面簡稱為主教材)的配套教材。全書分為3部分,具體如下。
第1部分總結了主教材所述的數據結構與算法基礎知識。主要目的是幫助讀者回顧所學知識,順利完成后續(xù)的實驗與課程設計。
第2部分包含了22個實驗。這些實驗題目包括了主教材正文內容的不同實現(xiàn)方式(例如實現(xiàn)不帶頭節(jié)點形式的單鏈表),包括了對主教材內容的改進(例如對主教材的哈夫曼樹類模板的方法EnCode加以改進,將查找字符位置通過指向函數的指針來實現(xiàn)),包括了對主教材算法的優(yōu)化(例如用賦值語句代替交換兩個數據元素的方法,來優(yōu)化快速排序算法與堆排序),包括了對主教材算法的改造與提高(例如改進最小生成樹的Kruskal算法),還包括了數據結構與算法的有趣應用(例如要求在一個n×n的棋盤上放置n個皇后并且放置的n個皇后不會互相吃掉),通過實驗極大提高讀者數據結構與算法的應用能力。每個實驗都包括目的與要求、工具及準備工作、實驗分析、實驗步驟、測試與結論以及思考與感悟幾部分。實驗給出了具體操作步驟以及具體、實用的指導,讓初學者面對實驗題目不會束手無策。希望讀者通過實驗能夠學有所思,得到啟迪與感悟。
第3部分包含了11個課程設計項目。簡單的項目可以一個人單獨完成,復雜的項目可由幾個人共同完成。這些項目包括對主教材中實例研究的改進(例如從鍵盤上輸入中綴算術表達式,包括括號,計算出表達式的值),包括接近實際課題的項目(例如采用哈夫曼算法開發(fā)一個壓縮軟件,以及采用圖的知識開發(fā)公園導游系統(tǒng)),包括容易引起讀者興趣的項目(例如詞典變位詞檢索系統(tǒng)),還包括開拓學生視野的項目(例如用具有自學習功能的專家系統(tǒng)思想實現(xiàn)《動物游戲》的開發(fā))。課程設計項目一般都提供功能的擴展方法,基礎較差的讀者可只實現(xiàn)基礎功能,對數據結構與算法有興趣的讀者可實現(xiàn)更強的功能,這樣使不同層次的讀者都會有所收獲。讀者通過做這些項目能快速提高解決實際問題的能力。每個項目都給出了分析與實現(xiàn)方法,還給出了一些改進建議,讀者可以在完成基本任務的前提下,對程序加以改進和提高。
本書所有實驗與課程設計都在Visual C++ 6.0、Visual C++ 2017、DevC++ v5.11和CodeBlocks v16.01中通過測試。
為滿足不同層次的教學需求,本教材使用了分層的思想,分層方法如下: 沒加星號“”及“”的部分是基本內容,適合所有讀者學習;加有星號“”的部分是適合計算機專業(yè)的讀者深入學習的選學部分;加有兩個星號“”的部分適合感興趣的同學研究,尤其適合那些準備參加ACM競賽的讀者加以深入研究。作者為本書提供了全面的教學支持,讀者可在清華大學出版社官網的本書頁面下載如下教學資源。
(1) 本書作者開發(fā)軟件包(包含所有本書所講的數據結構與算法的類模板與函數模板)。
(2) 全書所有實驗與課程設計的在Visual C++ 6.0、Visual C++ 2017、DevC++ v5.11和CodeBlocks v16.01開發(fā)環(huán)境中的測試程序。
(3) 數據結構與算法相關的其他資料(例如DevC++v5.11與CodeBlocks v16.01軟件等開源C++編譯器)。
通過掃描二維碼可觀看全書所有實驗與課程設計的測試程序演示視頻,其中第1個二維碼對應Visual C++ 6.0開發(fā)環(huán)境的測試程序演示視頻,第2個二維碼對應VisualC++ 2017開發(fā)環(huán)境的測試程序演示視頻,第3個二維碼對應DevC++ v5.11開發(fā)環(huán)境的測試程序演示視頻,第4個二維碼對應CodeBlocks v16.01開發(fā)環(huán)境的測試程序演示視頻。
在附錄D中介紹Visual C++ 6.0、Visual C++ 2017、DevC++ v5.11和CodeBlocks v16.01開發(fā)環(huán)境建立工程的步驟,可通過掃描二維碼觀看具體操作視頻。
程艷紅、袁平、陳良銀、游倩、張銀、文芝明等人對本書做了大量的工作,包括提供資料,調試算法,參與了部分內容的編寫,在此特向他們表示感謝;作者還要感謝為本書提供直接或間接幫助的每一個朋友,由于你們的熱情幫助和鼓勵,才激發(fā)了作者寫好本書的信心和寫作熱情。
本書的出版要感謝清華大學出版社的相關編校人員大力支持,由于他們?yōu)楸緯某霭鎯A注了大量熱情,也由于他們的前瞻性眼光,才讓讀者有機會看到本書。
盡管作者有認真負責的態(tài)度,并做了最大努力,但由于作者水平有限,書中難免出現(xiàn)不妥之處,敬請各位讀者不吝賜教,以便及時修正,提高本書的水準。
作者2020年9月