數(shù)據(jù)結(jié)構(gòu)(C#語(yǔ)言版)
定 價(jià):28 元
- 作者:雷軍環(huán)、鄧文達(dá)
- 出版時(shí)間:2009/2/1
- ISBN:9787302190479
- 出 版 社:清華大學(xué)出版社
- 中圖法分類(lèi):TP311.12
- 頁(yè)碼:
- 紙張:18
- 版次:1
- 開(kāi)本:16開(kāi)
本書(shū)通過(guò)具體的編程實(shí)例,詳細(xì)介紹了數(shù)據(jù)結(jié)構(gòu)及其算法。全書(shū)共分11章,內(nèi)容包括數(shù)據(jù)結(jié)構(gòu)和算法的簡(jiǎn)介,解決線性表、堆棧、隊(duì)列、串、數(shù)組、二叉樹(shù)及樹(shù)、圖的編程,執(zhí)行排序和查找算法。全書(shū)采用C#語(yǔ)言作為算法描述語(yǔ)言。
本書(shū)內(nèi)容豐富,層次清晰,講解深入淺出,可作為計(jì)算機(jī)及相關(guān)專業(yè)本、?茢(shù)據(jù)結(jié)構(gòu)課程的教材,也適合各類(lèi)成人教育相關(guān)課程使用,還可以供從事計(jì)算機(jī)軟件開(kāi)發(fā)和應(yīng)用的工程技術(shù)人員閱讀、參考。
數(shù)據(jù)結(jié)構(gòu)知識(shí)是計(jì)算機(jī)科學(xué)教育的一個(gè)基本組成部分,其他許多計(jì)算機(jī)科學(xué)領(lǐng)域都構(gòu)建在這個(gè)基礎(chǔ)之上。對(duì)于想從事實(shí)際的軟件設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試和維護(hù)工作的讀者而言,掌握基本數(shù)據(jù)結(jié)構(gòu)的知識(shí)是非常必要的。該領(lǐng)域的知識(shí)將對(duì)一個(gè)人的編程能力有著極深的影響,它告訴您如何在軟件開(kāi)發(fā)過(guò)程中建立一個(gè)合理高效的程序。然而由于數(shù)據(jù)結(jié)構(gòu)是一門(mén)實(shí)踐性較強(qiáng)而理論知識(shí)較為抽象的課程,目前很多學(xué)生在學(xué)完了這門(mén)課后,還是不知道如何運(yùn)用所學(xué)的知識(shí)解決實(shí)際的問(wèn)題,針對(duì)這種情況本書(shū)進(jìn)行了精心的設(shè)計(jì)。本書(shū)主要特點(diǎn)如下:
(1) 基于典型任務(wù)
本書(shū)的每一章都通過(guò)典型任務(wù)引出問(wèn)題,通過(guò)典型任務(wù)創(chuàng)設(shè)學(xué)習(xí)情境。所有典型任務(wù)都是經(jīng)過(guò)精心篩選和設(shè)計(jì)的與生活緊密相連的、生動(dòng)直觀的、難易適中的實(shí)際問(wèn)題,可以讓學(xué)生先思考如何利用以往所學(xué)的知識(shí)去解決該問(wèn)題,然后再由教師分析教材上如何運(yùn)用數(shù)據(jù)結(jié)構(gòu)的理論來(lái)解決同一問(wèn)題,讓學(xué)生深刻體會(huì)到所學(xué)數(shù)據(jù)結(jié)構(gòu)在程序中的作用和使用方法,從而真正體會(huì)到“程序=數(shù)據(jù)結(jié)構(gòu)+算法”的真正含義。
(2) 基于問(wèn)題求解過(guò)程
本書(shū)除第1章外,所有其他章節(jié)都是按照問(wèn)題提出→分析邏輯結(jié)構(gòu)→分析存儲(chǔ)結(jié)構(gòu)→分析基于存儲(chǔ)結(jié)構(gòu)的算法→用C#實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和算法這樣一個(gè)完整問(wèn)題求解過(guò)程來(lái)組織內(nèi)容的。也就是說(shuō)對(duì)于每一個(gè)實(shí)際的問(wèn)題,首先明確數(shù)據(jù)元素及數(shù)據(jù)元素之間的邏輯關(guān)系,即邏輯結(jié)構(gòu); 其次要理解這些數(shù)據(jù)元素在計(jì)算機(jī)中的存儲(chǔ)結(jié)構(gòu)以及基于這種存儲(chǔ)結(jié)構(gòu)的對(duì)數(shù)據(jù)元素的基本操作(即算法),最后用C#語(yǔ)言將數(shù)據(jù)結(jié)構(gòu)和算法轉(zhuǎn)換為能夠直接運(yùn)行的程序代碼。
(3) C#語(yǔ)言描述
目前,C#語(yǔ)言是微軟公司在新一代開(kāi)發(fā)平臺(tái).NET上推出的完全面向?qū)ο蟮恼Z(yǔ)言,憑著其簡(jiǎn)潔、高效、模板、標(biāo)準(zhǔn)化的特性,使得C#語(yǔ)言像程序設(shè)計(jì)語(yǔ)言中的一件藝術(shù)品,吸引著越來(lái)越多的開(kāi)發(fā)人員。相比于很多數(shù)據(jù)結(jié)構(gòu)的教材用C語(yǔ)言描述,本教材的算法將采用最新語(yǔ)言C#進(jìn)行編寫(xiě),將更有助于學(xué)生熟悉如何用面向?qū)ο蟮恼Z(yǔ)言來(lái)描述數(shù)據(jù)結(jié)構(gòu)的算法,從而和實(shí)際的開(kāi)發(fā)工作能更加緊密地聯(lián)系起來(lái)。
本書(shū)以雷軍環(huán)為主編寫(xiě),對(duì)全書(shū)的教學(xué)內(nèi)容和學(xué)習(xí)情境進(jìn)行了精心的設(shè)計(jì)。劉震、鄧文達(dá)、謝英輝、謝海波、唐一韜、馬佩勛、賀宗梅、吳名星分別對(duì)第1、2、3、4、5、6、7、8章內(nèi)容進(jìn)行了編寫(xiě),第9、10、11章由雷軍環(huán)編寫(xiě)。
本教材的編寫(xiě)得益于著名職業(yè)教育學(xué)家姜大源教授的開(kāi)發(fā)基于工作過(guò)程系統(tǒng)化課程方法的啟示,并有幸得到姜大源教授的指導(dǎo),在此向他表示衷心的感謝。出版社的編輯為本書(shū)的修訂和出版做了大量的工作,與他們的合作非常愉快。還有我的學(xué)生陳軍和張自葵參與了本書(shū)的校稿和調(diào)試代碼工作,在此一并表示感謝。
盡管編者在寫(xiě)作過(guò)程中非常認(rèn)真和努力,但由于編者水平有限,書(shū)中難免存在錯(cuò)誤和不足之處,懇請(qǐng)廣大讀者批評(píng)指正。
編者2008年12月
第1章數(shù)據(jù)結(jié)構(gòu)和算法簡(jiǎn)介
1.1問(wèn)題引入
1.1.1查找電話號(hào)碼問(wèn)題
1.1.2問(wèn)題求解基本步驟
1.2認(rèn)識(shí)數(shù)據(jù)結(jié)構(gòu)
1.2.1數(shù)據(jù)的概念
1.2.2數(shù)據(jù)元素和數(shù)據(jù)項(xiàng)
1.2.3數(shù)據(jù)結(jié)構(gòu)的概念
1.2.4數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)
1.3認(rèn)識(shí)算法
1.3.1算法的定義及特征
1.3.2算法性能分析與度量
1.4尋求問(wèn)題求解的實(shí)現(xiàn)方法
本章小結(jié)
綜合練習(xí)
第2章解決線性表的編程問(wèn)題
學(xué)習(xí)情境: 用線性表解決學(xué)生成績(jī)表的編程
2.1認(rèn)識(shí)線性表
2.1.1分析線性表的邏輯結(jié)構(gòu)
2.1.2識(shí)別線性表的基本操作
2.2用順序表解決線性表的編程問(wèn)題
2.2.1用順序表表示線性表
2.2.2對(duì)順序表進(jìn)行操作
2.2.3順序表在學(xué)生成績(jī)表中的應(yīng)用
獨(dú)立實(shí)踐
2.3用單鏈表解決線性表的編程問(wèn)題
2.3.1用單鏈表表示線性表
2.3.2對(duì)單鏈表進(jìn)行操作
2.3.3單鏈表在學(xué)生成績(jī)表中的應(yīng)用
獨(dú)立實(shí)踐
2.4用雙向鏈表解決線性表的編程問(wèn)題
2.4.1用雙向鏈表表示線性表
2.4.2對(duì)雙向鏈表進(jìn)行操作
2.4.3雙向鏈表在學(xué)生成績(jī)表中的應(yīng)用
獨(dú)立實(shí)踐
2.5用循環(huán)鏈表解決線性表的編程問(wèn)題
2.5.1用循環(huán)鏈表表示線性表
2.5.2對(duì)循環(huán)鏈表進(jìn)行操作
2.5.3循環(huán)鏈表在學(xué)生成績(jī)表中的應(yīng)用
獨(dú)立實(shí)踐
2.6度量不同存儲(chǔ)結(jié)構(gòu)的算法效率
2.6.1分析順序表的算法效率
2.6.2分析單鏈表的算法效率
本章小結(jié)
綜合練習(xí)
第3章解決堆棧的編程問(wèn)題
學(xué)習(xí)情境: 用堆棧解決火車(chē)車(chē)廂重排問(wèn)題的編程
3.1認(rèn)識(shí)堆棧
3.1.1分析堆棧的邏輯結(jié)構(gòu)
3.1.2識(shí)別堆棧的基本操作
3.2用順序棧解決堆棧的編程問(wèn)題
3.2.1用順序棧表示堆棧
3.2.2對(duì)順序棧進(jìn)行操作
3.2.3用順序棧解決火車(chē)車(chē)廂重排問(wèn)題的編程
3.3用鏈棧解決堆棧的編程問(wèn)題
3.3.1用鏈棧表示堆棧
3.3.2對(duì)鏈棧進(jìn)行操作
3.3.3用鏈棧解決火車(chē)車(chē)廂重排問(wèn)題的編程
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
第4章解決隊(duì)列的編程問(wèn)題
學(xué)習(xí)情境: 用隊(duì)列解決銀行排隊(duì)叫號(hào)軟件的編程
4.1認(rèn)識(shí)隊(duì)列
4.1.1分析隊(duì)列的邏輯結(jié)構(gòu)
4.1.2識(shí)別隊(duì)列的基本操作
4.2用順序隊(duì)列解決隊(duì)列的編程問(wèn)題
4.2.1用順序存儲(chǔ)結(jié)構(gòu)表示隊(duì)列
4.2.2對(duì)順序隊(duì)列進(jìn)行操作
4.2.3用循環(huán)順序隊(duì)列解決銀行排隊(duì)叫號(hào)軟件的編程
4.3用鏈隊(duì)列解決隊(duì)列的編程問(wèn)題
4.3.1用鏈隊(duì)列表示隊(duì)列
4.3.2對(duì)鏈隊(duì)列進(jìn)行操作
4.3.3用鏈隊(duì)列解決銀行排隊(duì)叫號(hào)軟件的編程
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
第5章解決串的編程問(wèn)題
學(xué)習(xí)情境: 用串解決“以一敵百”游戲的編程
5.1認(rèn)識(shí)串
5.1.1分析串的邏輯結(jié)構(gòu)
5.1.2識(shí)別串的基本操作
5.2用順序存儲(chǔ)解決串的編程問(wèn)題
5.2.1用順序存儲(chǔ)結(jié)構(gòu)表示串
5.2.2對(duì)順序串進(jìn)行操作
5.2.3用順序串解決“以一敵百”游戲的編程
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
第6章解決數(shù)組的編程問(wèn)題
學(xué)習(xí)情境: 用數(shù)組解決數(shù)學(xué)魔術(shù)游戲編程
6.1認(rèn)識(shí)數(shù)組
6.1.1描述數(shù)組的邏輯結(jié)構(gòu)
6.1.2識(shí)別數(shù)組的基本操作
6.1.3用順序存儲(chǔ)結(jié)構(gòu)存儲(chǔ)數(shù)組
6.1.4編程實(shí)現(xiàn)數(shù)組的基本操作
6.1.5用數(shù)組解決數(shù)學(xué)魔術(shù)游戲的編程
獨(dú)立實(shí)踐
學(xué)習(xí)情境: 用特殊矩陣解決查詢城市間的距離的編程
6.2認(rèn)識(shí)特殊矩陣
6.2.1分析特殊矩陣的邏輯結(jié)構(gòu)
6.2.2特殊矩陣的壓縮存儲(chǔ)
6.2.3用特殊矩陣解決查詢城市間距離的編程
獨(dú)立實(shí)踐
學(xué)習(xí)情境: 用稀疏矩陣解決超市物品購(gòu)買(mǎi)數(shù)據(jù)的編程
6.3認(rèn)識(shí)稀疏矩陣
6.3.1描述稀疏矩陣的邏輯結(jié)構(gòu)
6.3.2稀疏矩陣的壓縮存儲(chǔ)
6.3.3編程實(shí)現(xiàn)稀疏矩陣的基本運(yùn)算
6.3.4用稀疏矩陣實(shí)現(xiàn)超市物品購(gòu)買(mǎi)數(shù)據(jù)的編程
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
第7章解決二叉樹(shù)的編程問(wèn)題
學(xué)習(xí)情境: 解決快速搜索磁盤(pán)文件中記錄的問(wèn)題
7.1認(rèn)識(shí)二叉樹(shù)
7.1.1分析二叉樹(shù)的邏輯結(jié)構(gòu)
7.1.2識(shí)別二叉樹(shù)的基本操作
7.1.3識(shí)別二叉樹(shù)的主要性質(zhì)
7.2二叉樹(shù)的存儲(chǔ)實(shí)現(xiàn)
7.2.1用順序存儲(chǔ)結(jié)構(gòu)表示二叉樹(shù)
7.2.2用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)表示二叉樹(shù)
7.3二叉樹(shù)的遍歷方法及遞歸實(shí)現(xiàn)
7.4用二叉搜索樹(shù)解決快速搜索磁盤(pán)文件中記錄的問(wèn)題
獨(dú)立實(shí)踐
7.5最優(yōu)二叉樹(shù)——哈夫曼樹(shù)
7.5.1哈夫曼樹(shù)的基本概念
7.5.2哈夫曼樹(shù)的構(gòu)造算法
本章小結(jié)
綜合練習(xí)
第8章解決樹(shù)和森林的編程問(wèn)題
學(xué)習(xí)情境: 用樹(shù)來(lái)解決學(xué)院組織結(jié)構(gòu)的編程問(wèn)題
8.1認(rèn)識(shí)樹(shù)
8.1.1分析樹(shù)的邏輯結(jié)構(gòu)
8.1.2樹(shù)的邏輯表示
8.1.3識(shí)別樹(shù)的基本操作
8.2實(shí)現(xiàn)樹(shù)的存儲(chǔ)
8.2.1用多重鏈表表示法存儲(chǔ)樹(shù)
8.2.2用雙親表示法存儲(chǔ)樹(shù)
8.2.3用孩子鏈表表示法存儲(chǔ)樹(shù)
8.2.4用雙親孩子表示法存儲(chǔ)樹(shù)
8.2.5用孩子兄弟表示法存儲(chǔ)樹(shù)
8.2.6用多重鏈表表示法解決學(xué)院組織結(jié)構(gòu)的編程
8.3樹(shù)、森林與二叉樹(shù)的轉(zhuǎn)換
8.3.1樹(shù)轉(zhuǎn)換為二叉樹(shù)
8.3.2森林轉(zhuǎn)換為二叉樹(shù)
8.3.3二叉樹(shù)轉(zhuǎn)換為樹(shù)和森林
8.4解決樹(shù)和森林的遍歷問(wèn)題
8.4.1樹(shù)的遍歷
8.4.2森林的遍歷
8.5樹(shù)的應(yīng)用
8.5.1集合的表示
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
第9章解決圖的編程問(wèn)題
學(xué)習(xí)情境: 用圖解決高速公路交通網(wǎng)的編程
9.1認(rèn)識(shí)圖
9.1.1圖的定義和術(shù)語(yǔ)
9.1.2識(shí)別圖的基本操作
9.2用鄰接矩陣解決圖的編程問(wèn)題
9.2.1用鄰接矩陣表示圖
9.2.2對(duì)鄰接矩陣進(jìn)行操作
9.2.3使用鄰接矩陣解決高速公路交通網(wǎng)的存儲(chǔ)問(wèn)題
9.3用鄰接表解決圖的編程問(wèn)題
9.3.1用鄰接表表示圖
9.3.2對(duì)鄰接表進(jìn)行操作
9.3.3使用鄰接表解決高速公路交通網(wǎng)的存儲(chǔ)問(wèn)題
獨(dú)立實(shí)踐
9.4解決圖的遍歷問(wèn)題
9.4.1深度優(yōu)先搜索
9.4.2廣度優(yōu)先搜索
9.4.3使用圖的遍歷解決高速公路交通網(wǎng)城市的遍歷
獨(dú)立實(shí)踐
9.5圖的最短路徑問(wèn)題
9.5.1Dijkstra算法的引入
9.5.2分析高速公路交通網(wǎng)的最短路徑
9.5.3編碼實(shí)現(xiàn)Dijkstra算法
9.5.4用Dijkstra算法解決高速公路交通網(wǎng)中最短路徑的編程
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
第10章實(shí)現(xiàn)排序算法
學(xué)習(xí)情境: 實(shí)現(xiàn)第29屆奧運(yùn)會(huì)奧運(yùn)獎(jiǎng)牌的排名
10.1認(rèn)識(shí)排序
10.1.1排序的概念
10.1.2排序的分類(lèi)
10.2插入排序
10.2.1直接插入排序
10.2.2希爾排序
10.3選擇排序
10.3.1直接選擇排序
10.3.2堆排序
10.4交換排序
10.4.1冒泡排序
10.4.2快速排序
10.5歸并排序
10.5.1歸并排序
10.6分配排序
10.6.1基數(shù)排序
10.7編程實(shí)現(xiàn)第29屆奧運(yùn)會(huì)奧運(yùn)獎(jiǎng)牌的排名
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
第11章執(zhí)行查詢算法
學(xué)習(xí)情境: 根據(jù)指定的條件查詢第29屆奧運(yùn)會(huì)獲獎(jiǎng)情況
11.1熟悉查找的基本概念
11.2線性表查找技術(shù)
11.2.1順序查找
11.2.2二分查找
11.2.3分塊查找
11.3哈希表查詢技術(shù)
11.3.1認(rèn)識(shí)哈希表
11.3.2構(gòu)造哈希函數(shù)
11.3.3解決哈希沖突
11.3.4實(shí)現(xiàn)哈希表的查找算法
11.3.5分析哈希表的性能
11.4編程實(shí)現(xiàn)第29屆奧運(yùn)會(huì)排行榜的查詢功能
獨(dú)立實(shí)踐
本章小結(jié)
綜合練習(xí)
參考文獻(xiàn)