《數(shù)據(jù)結(jié)構(gòu)案例教程(C/C++版)》共9章,圍繞線性表、棧、隊列、串、矩陣、廣義表、樹、二叉樹、圖等常用的數(shù)據(jù)結(jié)構(gòu),介紹了基本概念、邏輯結(jié)構(gòu)、存儲結(jié)構(gòu)、操作運算以及實現(xiàn)算法、案例應(yīng)用;還介紹了多種常用的查找算法和排序算法,并對各種算法的性能進行分析。書中使用C語言定義各種數(shù)據(jù)結(jié)構(gòu),利用C/C++代碼描述算法。
《數(shù)據(jù)結(jié)構(gòu)案例教程(C/C++版)》的每一章以若干典型的導(dǎo)學(xué)問題為主線貫穿組織,由“知識學(xué)習(xí)”“知識應(yīng)用”和“知識拓展”等部分組成。圍繞導(dǎo)學(xué)問題,引導(dǎo)學(xué)習(xí)者思考問題、對實際問題進行抽象建模、實現(xiàn)模型和應(yīng)用模型。每章均附有本章小結(jié)、思考與練習(xí)和應(yīng)用實戰(zhàn),附錄給出了課程考試樣卷和課程設(shè)計題。
《數(shù)據(jù)結(jié)構(gòu)案例教程(C/C++版)》可作為計算機科學(xué)與技術(shù)專業(yè)、軟件工程專業(yè)及其他相關(guān)專業(yè)“數(shù)據(jù)結(jié)構(gòu)”課程的教材以及研究生入學(xué)考試輔導(dǎo)書,也可供計算機軟件開發(fā)人員或編程愛好者參考和使用。
“數(shù)據(jù)結(jié)構(gòu)”是計算機科學(xué)與技術(shù)專業(yè)、軟件工程及相關(guān)專業(yè)的核心課程之一,是計算機科學(xué)與技術(shù)、軟件工程等專業(yè)研究生考試必考科目之一,也是IT公司面試或筆試考核的主要內(nèi)容。數(shù)據(jù)結(jié)構(gòu)主要分析計算機中數(shù)據(jù)組織的方式和相關(guān)操作算法,涉及數(shù)據(jù)結(jié)構(gòu)和算法的基本概念與技術(shù),線性表、棧、隊列、串、數(shù)組與廣義表、樹、二叉樹、圖等常用數(shù)據(jù)結(jié)構(gòu)及相關(guān)算法,以及排序、查找等重要技術(shù)。本課程既是對前導(dǎo)的程序設(shè)計類課程、離散數(shù)學(xué)等課程的深入和拓展,也為繼續(xù)深入學(xué)習(xí)數(shù)據(jù)庫、操作系統(tǒng)、編譯原理、計算機網(wǎng)絡(luò)等后續(xù)專業(yè)課程打下了重要基礎(chǔ)。
“數(shù)據(jù)結(jié)構(gòu)”是一門直接面向?qū)嶋H應(yīng)用、解決實際問題的課程,它的教學(xué)目標(biāo)是,讓學(xué)習(xí)者學(xué)會從問題人手,分析研究計算機加工的數(shù)據(jù)結(jié)構(gòu)的特性,以便為應(yīng)用所涉及的數(shù)據(jù)選擇適當(dāng)?shù)倪壿嫿Y(jié)構(gòu)、存儲結(jié)構(gòu)及其相應(yīng)的操作算法,并初步掌握時間和空間分析技術(shù)。
筆者從事“數(shù)據(jù)結(jié)構(gòu)”課程的教學(xué)已有二十多年,深切了解學(xué)習(xí)者對于學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)”課程的普遍體會是,概念難理解、算法難設(shè)計、編程難實現(xiàn)、知識難應(yīng)用。如何幫助學(xué)習(xí)者實現(xiàn)兩個跨越:從實際應(yīng)用問題到數(shù)據(jù)結(jié)構(gòu)抽象的跨越和從數(shù)據(jù)結(jié)構(gòu)概念到程序?qū)崿F(xiàn)的跨越,是我們一直努力的目標(biāo)。近年來,我們以“問題導(dǎo)學(xué)”模式進行了該課程教學(xué)的探索和實踐,本書是這些工作的成果。
“問題導(dǎo)學(xué)”模式是以問題解決為主線,以學(xué)生學(xué)習(xí)為主體,使學(xué)生在解決問題的過程中掌握知識,形成自主學(xué)習(xí)能力的一種教學(xué)模式。該模式的具體過程是:引導(dǎo)學(xué)生分析問題中的已知信息,提煉數(shù)據(jù)及數(shù)據(jù)之間的關(guān)系(數(shù)據(jù)的邏輯結(jié)構(gòu)),選擇合適的存儲方式(數(shù)據(jù)的存儲結(jié)構(gòu))將待處理的數(shù)據(jù)保存到計算機中,然后在存儲結(jié)構(gòu)之上按照自頂向下逐步細化的方法設(shè)計算法,給出程序?qū)崿F(xiàn),并進行測試和調(diào)試分析。
本書的每一章以若干典型的導(dǎo)學(xué)問題為主線貫穿組織,由“知識學(xué)習(xí)”“知識應(yīng)用”和“知識拓展”等部分組成。圍繞導(dǎo)學(xué)問題,引導(dǎo)學(xué)習(xí)者思考問題、對實際問題進行抽象建模、實現(xiàn)模型和應(yīng)用模型。與高級程序設(shè)計語言課相比,數(shù)據(jù)結(jié)構(gòu)在培養(yǎng)學(xué)生的數(shù)據(jù)抽象能力方面有著更高的要求,通過本書不同層次的導(dǎo)學(xué)問題示例培養(yǎng)學(xué)生逐步掌握數(shù)據(jù)抽象的能力,學(xué)會數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型的使用方法,為今后的學(xué)習(xí)和提高編程水平打下扎實的基礎(chǔ)。
本書以學(xué)生學(xué)習(xí)為主體,在內(nèi)容的組織和選材上指導(dǎo)學(xué)生通過思考、比較、建構(gòu),逐步形成學(xué)生自己的知識框架,并發(fā)展相應(yīng)的能力。為此,本書在每一章開頭設(shè)置了學(xué)習(xí)導(dǎo)圖.指導(dǎo)學(xué)生體驗思考問題、初步解決問題、進一步解決復(fù)雜問題這一學(xué)習(xí)過程。每章學(xué)習(xí)過程中設(shè)置了一些書寫填空題,讓學(xué)生不僅耳動起來、嘴動起來,還要手動起來,真正成為課堂的主人,積極主動地進行學(xué)習(xí)和思考。每章課后安排的思考與練習(xí)、應(yīng)用實戰(zhàn)讓學(xué)生能夠進行達標(biāo)檢測、鞏固知識、查漏補缺。
本書以學(xué)生學(xué)習(xí)為主體,還體現(xiàn)在重視對學(xué)生進行復(fù)雜程序設(shè)計的訓(xùn)練,指導(dǎo)學(xué)生書寫符合軟件工程規(guī)范的文件,編寫結(jié)構(gòu)清晰、正確易讀的程序,上機調(diào)試并排除錯誤代碼等。全書采用C語言作為數(shù)據(jù)結(jié)構(gòu)和算法的基本描述工具,同時采用了C++對C的非面向?qū)ο蟮脑鰪姽δ堋@,輸入/輸出采用了cin、cout運算符,函數(shù)參數(shù)傳遞采用了引用、動態(tài)分配和釋放,存儲結(jié)構(gòu)采用了new和delete運算符等。這些措施使得數(shù)據(jù)類型的定義和數(shù)據(jù)結(jié)構(gòu)相關(guān)操作算法的描述更加簡明清晰,可讀性好,易于學(xué)習(xí)掌握。學(xué)習(xí)者也可把類型定義和操作算法稍加處理,這樣就很容易將其封裝成類,并進一步轉(zhuǎn)化成面向?qū)ο蟮某绦。全書算法和?dǎo)學(xué)問題的源程序使用VisualC++6.O集成環(huán)境完成并提供下載。
本書在內(nèi)容組織和設(shè)計上進行了創(chuàng)新,一方面可以幫助學(xué)習(xí)者把學(xué)習(xí)的新知識形成網(wǎng)、織成塊、用起來;另一方面,也對教師有效地組織課堂教學(xué)提供了便利。教師可以根據(jù)教材資源,對學(xué)習(xí)者進行問題引導(dǎo)、疑難精講、質(zhì)疑點撥、檢測評估。
前言
第1章緒論
導(dǎo)學(xué)問題1:問題中的數(shù)據(jù)在計算機中如何組織?
導(dǎo)學(xué)問題2:程序的效率如何改進?
1.1知識學(xué)習(xí)
1.1.1數(shù)據(jù)結(jié)構(gòu)課程的研究內(nèi)容
1.1.2數(shù)據(jù)的結(jié)構(gòu)
1.1.3算法與算法分析
1.2知識應(yīng)用
1.2.1導(dǎo)學(xué)問題1-4、1-5和1-6的數(shù)據(jù)結(jié)構(gòu)
1.2.2導(dǎo)學(xué)問題2的時間復(fù)雜度
1.3知識拓展
1.3.1算法時間復(fù)雜度分析
1.3.2算法執(zhí)行時間測試
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第2章線性表
導(dǎo)學(xué)問題1:實現(xiàn)一個簡易的學(xué)生信息管理系統(tǒng)
導(dǎo)學(xué)問題2:實現(xiàn)一個簡易的商品信息管理系統(tǒng)
2.1知識學(xué)習(xí)
2.1.1線性表的概念
2.1.2線性表的順序存儲及基本操作
2.1.3線性表的鏈?zhǔn)酱鎯盎静僮?
2.2知識應(yīng)用
2.2.1導(dǎo)學(xué)問題1的順序表實現(xiàn)
2.2.2導(dǎo)學(xué)問題1的單鏈表實現(xiàn)
2.3知識拓展
2.3.1順序表的其他操作
2.3.2單鏈表的其他操作
2.3.3順序表和鏈表的綜合比較
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第3章操作受限的線性表:棧和隊列
導(dǎo)學(xué)問題1:數(shù)制轉(zhuǎn)換問題
導(dǎo)學(xué)問題2:銀行排隊問題
3.1棧
3.1.1知識學(xué)習(xí)
3.1.2知識應(yīng)用:導(dǎo)學(xué)問題1的實現(xiàn)
3.1.3知識拓展:棧的其他應(yīng)用
3.2隊列
3.2.1知識學(xué)習(xí)
3.2.2知識應(yīng)用:導(dǎo)學(xué)問題2的實現(xiàn)
3.2.3知識拓展:隊列的其他應(yīng)用
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第4章元素受限的線性表:串
導(dǎo)學(xué)問題:微信中的安全提醒
4.1知識學(xué)習(xí)
4.1.1串的基本概念
4.1.2串的存儲結(jié)構(gòu)
4.1.3串的操作算法
4.2知識應(yīng)用:導(dǎo)學(xué)問題的實現(xiàn)
4.3知識拓展:KMP模式匹配算法
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第5章元素擴展的線性表:矩陣和廣義表
導(dǎo)學(xué)問題1:個性化推薦系統(tǒng)中的用戶評分表
導(dǎo)學(xué)問題2:本科生創(chuàng)新實踐項目中的人員關(guān)系
5.1矩陣
5.1.1知識學(xué)習(xí)
5.1.2知識應(yīng)用:導(dǎo)學(xué)問題1的實現(xiàn)
5.1.3知識拓展:稀疏矩陣的轉(zhuǎn)置操作
5.2廣義表
5.2.1知識學(xué)習(xí)
5.2.2知識應(yīng)用:導(dǎo)學(xué)問題2的實現(xiàn)
5.2.3知識拓展:廣義表的其他操作
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第6章樹和二叉樹
導(dǎo)學(xué)問題1:查找U盤中文件的存儲路徑
導(dǎo)學(xué)問題2:表達式樹中的算術(shù)表達式求值
6.1知識學(xué)習(xí)
6.1.1樹
6.1.2二叉樹
6.1.3樹、森林與二叉樹的轉(zhuǎn)換
6.2知識應(yīng)用
6.2.1導(dǎo)學(xué)問題1的實現(xiàn)
6.2.2導(dǎo)學(xué)問題2的實現(xiàn)
6.3知識拓展
6.3.1二叉樹的其他操作
6.3.2線索二叉樹
6.3.3Huffman樹與Huffman編碼
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第7章圖
導(dǎo)學(xué)問題1:構(gòu)造最小造價通信網(wǎng)
導(dǎo)學(xué)問題2:設(shè)計一個簡單的旅游交通費用查詢系統(tǒng)
7.1知識學(xué)習(xí)
7.1.1圖的基本概念
7.1.2圖的存儲結(jié)構(gòu)
7.1.3圖的遍歷
7.1.4最小生成樹
7.1.5最短路徑
7.2知識應(yīng)用
7.2.1導(dǎo)學(xué)問題1的實現(xiàn)
7.2.2導(dǎo)學(xué)問題2的實現(xiàn)
7.3知識拓展
7.3.1AOV網(wǎng)與拓撲排序
7.3.2AOE網(wǎng)與關(guān)鍵路徑
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第8章查找
導(dǎo)學(xué)問題:簡單通訊錄查詢
8.1知識學(xué)習(xí)
8.1.1查找的基本概念
8.1.2順序表查找
8.1.3樹表查找
8.2知識應(yīng)用:導(dǎo)學(xué)問題的實現(xiàn)
8.3知識拓展
8.3.1大數(shù)據(jù)的查找算法選擇
8.3.2Hash表查找
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
第9章排序
導(dǎo)學(xué)問題:網(wǎng)絡(luò)購物中的商品排序
9.1知識學(xué)習(xí)
9.1.1排序的基本概念
9.1.2交換類排序
9.1.3插入類排序
9.1.4選擇類排序
9.1.5歸并排序
9.2知識應(yīng)用:導(dǎo)學(xué)問題的實現(xiàn)
9.3知識拓展
9.3.1冒泡排序的改進
9.3.2分配類排序:基數(shù)排序
9.3.3排序算法總結(jié)
本章小結(jié)
思考與練習(xí)
應(yīng)用實戰(zhàn)
附錄
附錄A數(shù)據(jù)結(jié)構(gòu)試題
數(shù)據(jù)結(jié)構(gòu)期中試卷
數(shù)據(jù)結(jié)構(gòu)期終試卷
附錄B數(shù)據(jù)結(jié)構(gòu)課程設(shè)計題
附錄C實驗報告、課程設(shè)計報告模板
附錄D學(xué)習(xí)資源
參考文獻