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