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