在 第二書店看到 期書(也就是預(yù)購),還不知道什么時(shí)候才能出來,先預(yù)購了再說,感覺很不錯(cuò)的。
多任務(wù)下的數(shù)據(jù)結(jié)構(gòu)與算法(含1CD) →推薦 →期書
定價(jià):58.00 元 | 售價(jià):45.24 元(78折)
金卡會(huì)員價(jià):43.88元 | 鉆石卡會(huì)員價(jià):42.98元
--------------------------------------------------------------------------------
作者:周偉明
出版社: 華中科技大學(xué)出版社? | ISBN:7-5609-3676-8 | 出版日期:2006年4月
開本:787*960,1/16 | 版別版次:2006年4月第一版第一次印刷
內(nèi)容簡介
本書和傳統(tǒng)同類書籍的區(qū)別是除了介紹基本的數(shù)據(jù)結(jié)構(gòu)容器如棧、隊(duì)列、鏈表、樹、二叉樹、紅黑樹、AVL樹和圖之外,引進(jìn)了多任務(wù);還介紹了將任意數(shù)據(jù)結(jié)構(gòu)容器變成支持多任務(wù)的方法;另外,還增加了復(fù)合數(shù)據(jù)結(jié)構(gòu)和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)等新內(nèi)容的介紹。在復(fù)合數(shù)據(jù)結(jié)構(gòu)中不僅介紹了哈希鏈表、哈希紅黑樹、哈希AVL樹等容器,還介紹了復(fù)合數(shù)據(jù)結(jié)構(gòu)的通用設(shè)計(jì)方法;在動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)中主要介紹了動(dòng)態(tài)環(huán)形隊(duì)列、動(dòng)態(tài)等尺寸內(nèi)存管理算法。在內(nèi)存管理中介紹了在應(yīng)用程序?qū)訉?shí)現(xiàn)的內(nèi)存垃圾回收算法、內(nèi)存泄漏檢查和內(nèi)存越界檢查的方法等。本書選取的內(nèi)容均側(cè)重于在實(shí)際中有廣泛應(yīng)用的數(shù)據(jù)結(jié)構(gòu)和算法,有很好的商業(yè)使用價(jià)值。
本書大部分章節(jié)中都列舉并介紹了應(yīng)用實(shí)例,如用AVL樹等容器實(shí)現(xiàn)的搜索引擎、用數(shù)組實(shí)現(xiàn)HOOK管理、用鏈表實(shí)現(xiàn)的短信息系統(tǒng)中的CACHE管理、用哈希表實(shí)現(xiàn)WebServer中的CACHE文件管理和用哈希AVL樹實(shí)現(xiàn)抗DoS/DDoS攻擊等。
書中重點(diǎn)介紹了軟件的各種質(zhì)量特性如時(shí)間效率和空間效率之間的關(guān)系,介紹了如何在各種質(zhì)量特性間取得均衡的原則,并介紹了各種數(shù)據(jù)結(jié)構(gòu)算法的應(yīng)用場合和范圍。
本書介紹的所有數(shù)據(jù)結(jié)構(gòu)及算法都以不同復(fù)雜程度給出其編碼實(shí)現(xiàn)。為了便于讀者自學(xué),每章末附有小結(jié)和思考練習(xí)題。
本書可供高校計(jì)算機(jī)及相關(guān)專業(yè)作為教學(xué)參考書,對從事軟件開發(fā)與應(yīng)用的科研人員、工程技術(shù)人員以及其他相關(guān)人員也具有較高的參考價(jià)值。
?
《多任務(wù)下的數(shù)據(jù)結(jié)構(gòu)與算法(含1CD)》圖書目錄:
第1章? 緒論 (1)
1.1? 引言 (1)
1.2? C語言編程常見問題分析 (2)
1.2.1? 參數(shù)校驗(yàn)問題 (3)
1.2.2? return語句的問題 (3)
1.2.3? while循環(huán)和for循環(huán)的問題 (4)
1.2.4? if語句的多個(gè)判斷問題 (4)
1.2.5? goto語句問題 (5)
1.2.6? switch …case 和if … else if 的效率區(qū)別 (5)
1.3? 任意數(shù)據(jù)類型處理 (7)
1.3.1? 任意數(shù)據(jù)類型處理的設(shè)計(jì)方法 (7)
1.3.2? 任意數(shù)據(jù)類型處理的實(shí)例 (8)
1.3.3? 任意數(shù)據(jù)類型處理的回調(diào)函數(shù)封裝 (9)
1.4? 多任務(wù)介紹 (10)
1.4.1? 多任務(wù)簡介 (10)
1.4.2? 鎖的概念 (10)
1.4.3? Windows下常用多任務(wù)操作函數(shù) (10)
1.4.4? Linux/Unix下常用多任務(wù)操作函數(shù) (12)
1.4.5? VxWorks下常用多任務(wù)操作函數(shù) (12)
1.4.6? 多任務(wù)函數(shù)的封裝 (13)
1.5? 軟件設(shè)計(jì)簡介 (14)
1.5.1? 軟件設(shè)計(jì)歷史簡述 (14)
1.5.2? 微觀設(shè)計(jì)學(xué)原理簡介 (15)
第2章? 數(shù)組 (17)
2.1? 棧 (17)
2.1.1? 棧的基本概念 (17)
2.1.2? 棧的編碼實(shí)現(xiàn) (18)
2.1.3? 多任務(wù)棧的實(shí)現(xiàn) (21)
2.2? 隊(duì)列 (24)
2.2.1? 隊(duì)列的基本概念和接口 (24)
2.2.2? 環(huán)形隊(duì)列(Queue) (25)
2.2.3? STL中的動(dòng)態(tài)隊(duì)列(STL∷deque) (29)
2.2.4? 動(dòng)態(tài)環(huán)形隊(duì)列 (30)
2.2.5? 各種隊(duì)列的時(shí)間效率測試及分析 (35)
2.2.6? 各種隊(duì)列的適用范圍 (36)
2.2.7? 關(guān)于時(shí)間效率和空間效率的原則 (36)
2.3? 排序表 (37)
2.3.1? 排序算法介紹 (37)
2.3.2? 快速排序算法 (38)
2.3.3? 排序表的設(shè)計(jì) (40)
2.3.4? 非遞歸的快速排序算法 (43)
2.3.5? 快速排序算法的復(fù)雜度分析 (47)
2.3.6? 二分查找算法 (48)
2.4? 實(shí)例:HOOK管理功能的實(shí)現(xiàn) (49)
2.4.1? 單個(gè)函數(shù)的HOOK實(shí)現(xiàn) (49)
2.4.2? 多個(gè)函數(shù)的HOOK實(shí)現(xiàn) (50)
2.4.3? HOOK功能的應(yīng)用簡介 (55)
2.4.4? HOOK使用的注意事項(xiàng) (56)
本章小結(jié) (56)
習(xí)題與思考 (56)
第3章? 鏈表 (57)
3.1? 單向鏈表 (57)
3.1.1? 單向鏈表的存儲表示 (57)
3.1.2? 單向鏈表的接口設(shè)計(jì) (59)
3.1.3? 單向鏈表的基本功能編碼實(shí)現(xiàn) (60)
3.2? 單向鏈表的逐個(gè)節(jié)點(diǎn)遍歷 (69)
3.2.1? 單向鏈表逐個(gè)節(jié)點(diǎn)遍歷基本概念 (69)
3.2.2? 單向鏈表逐個(gè)節(jié)點(diǎn)遍歷編碼實(shí)現(xiàn) (70)
3.3? 單向鏈表的排序 (71)
3.3.1? 插入排序 (71)
3.3.2? 歸并插入排序 (74)
3.3.3? 基數(shù)排序 (79)
3.4? 雙向鏈表 (85)
3.4.1? 雙向鏈表的基本概念 (85)
3.4.2? 雙向鏈表的設(shè)計(jì) (85)
3.4.3? 雙向鏈表的編碼實(shí)現(xiàn) (86)
3.5? 使用整塊內(nèi)存的鏈表 (107)
3.5.1? 整塊內(nèi)存鏈表的基本概念 (107)
3.5.2? 整塊內(nèi)存鏈表的編碼實(shí)現(xiàn) (109)
3.6? 實(shí)例:使用鏈表管理短信息系統(tǒng)的CACHE (113)
3.6.1? 短信息系統(tǒng)的CACHE管理基本概念 (113)
3.6.2? 短信息系統(tǒng)的發(fā)送和接收分析 (114)
3.6.3? 短信息系統(tǒng)CACHE管理的編碼實(shí)現(xiàn) (115)
本章小結(jié) (118)
習(xí)題與思考 (118)
第4章? 哈希表 (119)
4.1? 哈希表 (119)
4.1.1? 哈希表的基本概念 (119)
4.1.2? 哈希表的索引方法 (120)
4.1.3? 哈希表的沖突解決方法 (123)
4.1.4? 哈希表基本操作的源代碼 (125)
4.2? 哈希鏈表 (130)
4.2.1? 哈希表和數(shù)組、鏈表的效率比較 (130)
4.2.2? 時(shí)間效率和空間效率的關(guān)系 (131)
4.2.3? 哈希鏈表的基本概念 (132)
4.2.4? 哈希鏈表的操作 (133)
4.2.5? 哈希鏈表的編碼實(shí)現(xiàn) (135)
4.3? 實(shí)例:WebServer的動(dòng)態(tài)CACHE文件管理 (143)
4.3.1? WebServer的動(dòng)態(tài)CACHE文件管理基本概念 (143)
4.3.2? CACHE文件管理功能的設(shè)計(jì) (144)
4.3.3? CACHE文件管理功能的編碼實(shí)現(xiàn) (145)
本章小結(jié) (151)
習(xí)題與思考 (151)
第5章? 樹 (153)
5.1? 普通樹 (153)
5.1.1? 普通樹的描述方法 (153)
5.1.2? 樹的操作接口設(shè)計(jì) (154)
5.1.3? 樹的遍歷算法 (154)
5.1.4? 樹的編碼實(shí)現(xiàn) (157)
5.1.5? 使用樹的遍歷算法來實(shí)現(xiàn)Xcopy功能 (163)
5.2? 二叉樹 (166)
5.2.1? 二叉樹的基本概念 (166)
5.2.2? 二叉樹的樹梢及二叉樹的高度 (166)
5.2.3? 二叉樹的描述方法 (167)
5.3? 二叉排序樹 (168)
5.3.1? 二叉排序樹的基本概念 (168)
5.3.2? 二叉排序樹的查找 (168)
5.3.3? 二叉排序樹的插入 (170)
5.3.4? 二叉排序樹的刪除 (172)
5.3.5? 二叉排序樹的遍歷 (176)
5.3.6? 二叉排序樹的旋轉(zhuǎn)操作 (178)
5.4? AVL搜索樹 (181)
5.4.1? AVL搜索樹的基本概念 (181)
5.4.2? AVL搜索樹的插入 (181)
5.4.3? AVL搜索樹的刪除 (184)
5.4.4? AVL樹的源代碼 (187)
5.5? 紅黑樹 (205)
5.5.1? 紅黑樹的基本概念 (205)
5.5.2? 紅黑樹的插入操作 (206)
5.5.3? 紅黑樹的刪除操作 (209)
5.5.4? 紅黑樹的編碼實(shí)現(xiàn) (214)
5.6? 實(shí)例:搜索引擎的實(shí)現(xiàn) (236)
5.6.1? 搜索引擎的實(shí)現(xiàn)思路和方法 (236)
5.6.2? 搜索引擎的時(shí)間效率和空間效率分析 (238)
5.6.3? 高級搜索的實(shí)現(xiàn) (240)
本章小結(jié) (241)
習(xí)題與思考 (241)
第6章? 復(fù)合二叉樹 (243)
6.1? 哈希紅黑樹 (243)
6.1.1? 哈希紅黑樹的基本概念 (243)
6.1.2? 哈希紅黑樹的查找 (245)
6.1.3? 哈希紅黑樹的插入 (246)
6.1.4? 哈希紅黑樹的刪除 (248)
6.1.5? 哈希紅黑樹的釋放 (248)
6.1.6? 哈希紅黑樹的遍歷 (249)
6.1.7? 哈希紅黑樹的編碼實(shí)現(xiàn) (249)
6.1.8? 哈希紅黑樹的效率分析 (255)
6.2? 哈希AVL樹 (256)
6.2.1? 哈希AVL樹的基本概念 (256)
6.2.2? 哈希AVL樹的查找 (257)
6.2.3? 哈希AVL樹的插入 (258)
6.2.4? 哈希AVL樹的刪除 (260)
6.2.5? 哈希AVL樹的釋放 (261)
6.2.6? 哈希AVL樹的遍歷 (261)
6.2.7? 哈希AVL樹的編碼實(shí)現(xiàn) (261)
6.2.8? 復(fù)合數(shù)據(jù)結(jié)構(gòu)的分類 (266)
6.3? 抗DoS/DDoS攻擊的實(shí)例 (267)
6.3.1? DoS/DDoS攻擊的概念 (267)
6.3.2? 常見DoS/DDoS攻擊手段及防范策略 (268)
6.3.3? 抗DoS/DDoS攻擊的實(shí)現(xiàn) (269)
6.3.4? 抗DoS/DDoS攻擊的編碼實(shí)現(xiàn) (269)
本章小結(jié) (272)
習(xí)題與思考 (273)
第7章? 圖 (275)
7.1? 圖的基本概念和描述方法 (275)
7.1.1? 圖的基本概念 (275)
7.1.2? 圖的描述方法 (276)
7.2? Dijkstra最短路徑算法 (277)
7.2.1? Dijkstra最短路徑算法的描述 (277)
7.2.2? Dijkstra最短路徑算法的過程圖解 (277)
7.2.3? Dijkstra最短路徑算法的編碼實(shí)現(xiàn) (278)
7.3? 最小生成樹算法 (282)
7.3.1? 最小生成樹算法的基本概念 (282)
7.3.2? 最小生成樹算法的過程圖解 (282)
7.3.3? 最小生成樹的算法流程圖 (283)
7.3.4? 最小生成樹算法的編碼實(shí)現(xiàn) (284)
7.4? 深度優(yōu)先搜索算法 (286)
7.4.1? 深度優(yōu)先搜索算法的描述 (286)
7.4.2? 深度優(yōu)先搜索算法的過程圖解 (287)
7.4.3? 深度優(yōu)先搜索算法的流程圖 (288)
7.4.4? 深度優(yōu)先搜索算法的編碼實(shí)現(xiàn) (289)
7.5? 寬度優(yōu)先搜索算法 (293)
7.5.1? 寬度優(yōu)先搜索算法的描述 (293)
7.5.2? 寬度優(yōu)先搜索算法的編碼實(shí)現(xiàn) (294)
7.6? 無環(huán)有向圖的分層算法 (297)
7.6.1? 無環(huán)有向圖的分層算法描述 (297)
7.6.2? 無環(huán)有向圖的分層算法過程圖解 (298)
7.7? 哈密頓圈算法 (299)
7.7.1? 哈密頓圈算法的描述 (299)
7.7.2? 哈密頓圈算法的過程圖解 (300)
本章小結(jié) (302)
習(xí)題與思考 (302)
第8章? 多任務(wù)算法 (303)
8.1? 讀寫鎖 (303)
8.1.1? 讀寫鎖概念的引出 (303)
8.1.2? 讀寫鎖算法的分析和實(shí)現(xiàn) (304)
8.1.3? 讀寫鎖的編碼實(shí)現(xiàn) (305)
8.2? 多任務(wù)資源釋放問題 (308)
8.2.1? 子任務(wù)釋放問題 (308)
8.2.2? 多個(gè)子任務(wù)釋放 (309)
8.2.3? 多任務(wù)釋放的實(shí)現(xiàn) (309)
8.3? 多任務(wù)下的遍歷問題 (313)
8.3.1? 鏈表在多任務(wù)下的遍歷問題 (313)
8.3.2? 多任務(wù)鏈表的設(shè)計(jì)和編碼實(shí)現(xiàn) (313)
8.3.3? 多任務(wù)鏈表的遍歷操作編碼實(shí)現(xiàn) (318)
8.3.4? 多個(gè)任務(wù)同時(shí)遍歷的情況 (321)
8.4? 多任務(wù)二叉樹的設(shè)計(jì) (322)
8.5? 消息隊(duì)列 (327)
8.5.1? 消息隊(duì)列的基本概念 (327)
8.5.2? 消息隊(duì)列的設(shè)計(jì)和編碼實(shí)現(xiàn) (327)
8.6? 實(shí)例:線程池調(diào)度的管理 (331)
8.6.1? 線程池調(diào)度管理的基本概念 (331)
8.6.2? 線程池調(diào)度管理的編碼實(shí)現(xiàn) (332)
本章小結(jié) (335)
習(xí)題與思考 (335)
第9章? 內(nèi)存管理算法 (337)
9.1? 動(dòng)態(tài)等尺寸內(nèi)存的分配算法 (337)
9.1.1? 靜態(tài)等尺寸內(nèi)存分配算法的分析 (337)
9.1.2? 動(dòng)態(tài)等尺寸內(nèi)存分配算法 (338)
9.2? 內(nèi)存垃圾收集算法 (351)
9.2.1? 垃圾收集算法簡介 (351)
9.2.2? 用戶層垃圾回收算法的實(shí)現(xiàn) (352)
9.2.3? 多任務(wù)下的垃圾收集 (360)
9.2.4? 使用垃圾回收算法來做內(nèi)存泄漏檢查 (367)
9.3? 實(shí)例:動(dòng)態(tài)等尺寸內(nèi)存管理算法的應(yīng)用 (370)
9.3.1? Emalloc內(nèi)存管理的概念 (370)
9.3.2? Emalloc內(nèi)存管理的編碼實(shí)現(xiàn) (371)
9.3.3? Emalloc內(nèi)存管理的使用方法 (375)
9.3.4? Emalloc內(nèi)存管理的內(nèi)存越界檢查 (376)
本章小結(jié) (378)
習(xí)題與思考 (378)
附? 參考文獻(xiàn) (379)
?
圖書序言
--------------------------------------------------------------------------------
自序
軟件的核心技術(shù)是什么?一個(gè)軟件要做出來后很難模仿才能稱之為擁有核心技術(shù)。軟件上市后,只要使用一下便知道有哪些功能,所以功能性需求是非常容易模仿的。比較難模仿的有兩個(gè)方面:一是軟件設(shè)計(jì),二是數(shù)據(jù)結(jié)構(gòu)與算法。好的算法可以申請專利,用作保護(hù)知識產(chǎn)權(quán)和限制競爭對手的重要手段,由此可見算法在軟件中的重要意義。軟件研發(fā)人員和測試人員的最大區(qū)別在于研發(fā)人員在數(shù)據(jù)結(jié)構(gòu)與算法方面要掌握得更好。
十年前,當(dāng)我初次來到深圳開始職業(yè)軟件生涯時(shí),出于對數(shù)學(xué)的熱愛,閑暇時(shí)經(jīng)常看一些數(shù)據(jù)結(jié)構(gòu)與算法方面的書籍和資料,常從其中受到啟發(fā)。經(jīng)過七年的日積月累后,忽然發(fā)現(xiàn)CPU的速度已快到達(dá)極限,多核CPU已投入實(shí)際使用,未來將是多核CPU的天下,對多任務(wù)編程提出了更高的要求,而目前數(shù)據(jù)結(jié)構(gòu)與算法方面的書籍均沒有涉足多任務(wù)方面,乃下定決心寫作本書,在歷時(shí)三年的寫作過程中又有一些新的心得寫入了本書中。
數(shù)據(jù)結(jié)構(gòu)與算法已經(jīng)成為軟件開發(fā)工程師的必備的基礎(chǔ)知識之一,在學(xué)校里,它已經(jīng)成為計(jì)算機(jī)學(xué)科的重要課程,同時(shí)也成為許多其他專業(yè)的熱門選修課,社會(huì)上大多數(shù)公司在招聘軟件開發(fā)人員時(shí)必然會(huì)考察應(yīng)聘人員數(shù)據(jù)結(jié)構(gòu)與算法的掌握程度,并將此作為衡量應(yīng)聘者水平的重要依據(jù)。本書是為那些已從事軟件開發(fā)或即將從事軟件開發(fā)的人員而寫,也可以供專業(yè)人士參考。本書注重實(shí)踐,注重軟件的設(shè)計(jì)與實(shí)現(xiàn),為軟件開發(fā)人員向職業(yè)化方向發(fā)展和進(jìn)一步提升打好基礎(chǔ)。
本書重點(diǎn)講解了多任務(wù)方面的內(nèi)容,講解了使數(shù)據(jù)結(jié)構(gòu)支持多任務(wù)的算法。講解了很多新的數(shù)據(jù)結(jié)構(gòu)與算法,也講解了數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)思想,如復(fù)合數(shù)據(jù)結(jié)構(gòu)和動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)思想,本書中的哈希紅黑樹和哈希AVL樹的設(shè)計(jì)就是復(fù)合數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的典范,而動(dòng)態(tài)等尺寸內(nèi)存管理算法則是動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)的代表。傳統(tǒng)的垃圾收集算法在進(jìn)行垃圾內(nèi)存收集時(shí)應(yīng)用程序會(huì)被停住,本書提供的算法在進(jìn)行垃圾內(nèi)存收集時(shí)不影響應(yīng)用程序的運(yùn)行,并且可以在應(yīng)用程序?qū)邮褂茫屎芨摺1緯械膶?shí)例也都是選用比較熱門的商業(yè)應(yīng)用如搜索引擎、短信息系統(tǒng)、抗DoS攻擊,WebServer等。
為了使更多的人能看懂此書,本書代碼基本都使用C語言來實(shí)現(xiàn),只有少數(shù)代碼使用C++實(shí)現(xiàn),因此具有C語言基礎(chǔ)知識就可以閱讀本書,本書的代碼也很容易改寫成C++,喜歡使用C++的朋友可以按照光盤中的版權(quán)申明要求將本書代碼改成用C++實(shí)現(xiàn),本書光盤附帶的代碼是可以免費(fèi)使用和修改的。
本書最終得以完成有賴于許多人的幫助。首先感謝我的妻子和兩歲多的兒子,在忘我投入寫作的無數(shù)個(gè)周末和假日,兒子也漸漸地從襁褓長大到能四處探險(xiǎn)。在寫作過程中,他雖經(jīng)常給我搗亂,但也給我?guī)砗芏鄽g樂,他的成長也伴隨了這本書的成型。為了使我能完成自己的宿愿,妻子放棄了自己的工作,默默承擔(dān)起照顧孩子和家庭的重?fù)?dān),有時(shí)還要幫我作一些書稿的錄入工作。
感謝華中科技大學(xué)出版社對此書的重視,感謝編輯王紅梅和劉勤老師等人,他們的工作大大改善了本書的質(zhì)量。
感謝最初引導(dǎo)我進(jìn)入軟件行業(yè)的鄧耀斌、唐玉天兩人。感謝當(dāng)年在 Santa Cruz 一起工作過的Neil Readshaw,九年前正是在他的指導(dǎo)和幫助下,我對多任務(wù)下的數(shù)據(jù)結(jié)構(gòu)和算法的理解有了較大的飛躍。
本書的寫作過程中參考了國內(nèi)外許多有關(guān)數(shù)據(jù)結(jié)構(gòu)與算法方面的文獻(xiàn),在此,我謹(jǐn)向那些卓有建樹的專家、學(xué)者致以誠摯的感謝!本書的寫作還得到了許多朋友的幫助和鼓勵(lì),溫野、唐文寧、羅巍等人幫助校對過部分章節(jié)的內(nèi)容,并給出了很好的改進(jìn)建議。一些朋友多年來持續(xù)給予了我鼓勵(lì)和幫助,包括章俊良、鄧耀斌、張莉、洪建明等,章俊良博士還幫我查閱過關(guān)于哈密頓圈算法的一些論文資料,還有很多人請恕我在這里不能把他們一一列出,在此對他們一并表示感謝!
?????????????????????????????????????????????????????? 周偉明
?????????????????????????????????????????????????????? 2006年3月
http://www.dearbook.com.cn/book/107608#bookCatalog