數據結構與算法JavaScript描述 (Data Structures and Algorithms with JavaScript)
內容描述
在過去幾年中,JavaScript憑借Node.js和SpiderMonkey等平臺,在服務器端編程中得到了廣泛應用。JavaScript程序員因而迫切需要使用傳統語言(比如C++和Java)提供的工具,包括傳統的數據結構以及傳統的排序和查找算法。《數據結構與算法JavaScript描述》討論在數組即對象、無處不在的全局變量、基於原型的對象模型等JavaScript語言的環境下,如何實現高效的數據結構和算法。
《數據結構與算法JavaScript描述》適合JavaScript程序員以及對JavaScript語言感興趣的學習者,特別是在學校中沒有系統學習過電腦科學相關課程的“跨界”程序員。
目錄大綱
推薦序
前言
第1章JavaScript的編程環境和模型1
1.1 JavaScript環境1
1.2 JavaScript編程實踐2
1.2.1聲明和初始化變量3
1.2.2 JavaScript中的算術運算和數學庫函數3
1.2.3判斷結構4
1.2 .4循環結構6
1.2.5函數7
1.2.6變量作用域7
1.2.7遞歸9
1.3對象和麵向對象編程10
1.4小結11
第2章數組13
2.1 JavaScript中對數組的定義13
2.2使用數組13
2.2 .1創建數組14
2.2.2讀寫數組15
2.2.3由字符串生成數組15
2.2.4對數組的整體性操作16
2.3存取函數17
2.3.1查找元素17
2.3.2數組的字符串表示18
2.3.3由已有數組創建新數組18
2.4可變函數19
2.4.1為數組添加元素19
2.4.2從數組中刪除元素20
2.4.3從數組中間位置添加和刪除元素21
2.4.4為數組排序21
2.5迭代器方法22
2.5.1不生成新數組的迭代器方法22
2.5.2生成新數組的迭代器方法25
2.6二維和多維數組27
2.6.1創建二維數組27
2.6.2處理二維數組的元素28
2.6.3參差不齊的數組29
2.7對像數組30
2.8對像中的數組31
2.9練習32
第3章列表33
3.1列表的抽像數據類型定義33
3.2實現列表類34
3.2.1 append:給列表添加元素35
3.2.2 remove:從列表中刪除元素35
3.2.3 find:在列表中查找某一元素35
3.2.4 length :列表中有多少個元素36
3.2.5 tostring:顯示列表中的元素36
3.2.6 insert:向列表中插入一個元素37
3.2.7 clear:清空列表中所有的元素37
3.2.8 contains:判斷給定值是否在列表中37
3.2.9遍歷列表38
3.3使用迭代器訪問列表39
3.4一個基於列表的應用40
3.4.1讀取文本文件40
3.4.2使用列表管理影碟租賃41
3.5練習44
第4章棧45
4.1對棧的操作45
4.2棧的實現46
4.3使用Stack類48
4.3.1數制間的相互轉換49
4.3.2回文50
4.3.3遞歸演示51
4.4練習52
第5章隊列53
5.1對隊列的操作53
5.2一個用數組實現的隊列54
5.3使用隊列:方塊舞的舞伴分配問題57
5.4使用隊列對數據進行排序61
5.5優先隊列63
5.6練習65
第6章鍊錶67
6.1數組的缺點67
6.2定義鍊錶67
6.3設計一個基於對象的鍊錶69
6.3.1 Node類69
6.3.2 LinkedList類69
6.3.3插入新節點69
6.3.4從鍊錶中刪除一個節點71
6.4雙向鍊錶74
6.5循環鍊錶78
6.6鍊錶的其他方法79
6.7練習79
第7章字典81
7.1 Dictionary類81
7.2 Dictionary類的輔助方法83
7.3為Dictionary類添加排序功能85
7.4練習86
第8章散列87
8.1散列概覽87
8.2 HashTable類88
8.2.1選擇一個散列函數88
8.2.2一個更好的散列函數91
8.2.3散列化整型鍵93
8.2.4對散列表排序、從散列表中取值95
8.3碰撞處理96
8.3.1開鏈法96
8.3.2線性探測法99
8.4練習100
第9章集合101
9.1集合的定義、操作和屬性101
9.1.1集合的定義101
9.1.2對集合的操作102
9.2 Set類的實現102
9.3更多集合操作104
9.4練習107
第10章二叉樹和二叉查找樹109
10.1樹的定義109
10.2二叉樹和二叉查找樹111
10.2.1實現二叉查找樹111
10.2.2遍歷二叉查找樹113
10.3在二叉查找樹上進行查找116
10.3.1查找最小值和最大值116
10.3.2查找給定值117
10.4從二叉查找樹上刪除節點118
10.5計數120
10.6練習123
第11章圖和圖算法125
11.1圖的定義125
11.2用圖對現實中的系統建模127
11.3圖類127
11.3.1表示頂點127
11.3.2表示邊127
11.3.3構建圖128
11.4搜索圖130
11.4.1深度優先搜索130
11.4.2廣度優先搜索133
11.5查找最短路徑135
11.5.1廣度優先搜索對應的最短路徑135
11.5.2確定路徑135
11.6拓撲排序137
11.6.1拓撲排序算法137
11.6.2實現拓撲排序算法137
11.7練習141
第12章排序算法143
12.1數組測試平台143
12.2基本排序算法145
12.2.1冒泡排序145
12.2.2選擇排序148
12.2.3插入排序150
12.2.4基本排序算法的計時比較151
12.3高級排序算法153
12.3.1希爾排序153
12.3.2歸併排序158
12.3.3快速排序163
12.4練習167
第13章檢索算法169
13.1順序查找169
13.1.1查找最小值和最大值172
13.1.2使用自組織數據175
13.2二分查找算法177
13.3查找文本數據183
13.4練習185
第14章高級算法187
14.1動態規劃187
14.1.1動態規劃實例:計算斐波那契數列188
14.1.2尋找最長公共子串191
14.1.3背包問題:遞歸解決方案194
14.1.4背包問題:動態規劃方案195
14.2貪心算法196
14.2.1第一個貪心算法案例:找零問題196
14.2.2背包問題的貪心算法解決方案197
14.3練習199
封面介紹200
作者介紹
Michael McMillan作為大學老師和程序員,曾編寫過多部受到好評的數據結構與算法圖書,包括Data Structures and Algorithms Using C#、Data Structures and Algorithms Using Visual Basic.NET,以及其他計算機教程,如Object-Oriented Programming with Visual Basic.NET、C++ Programming: An Introduction or A Clear and Concise Introduction to C++ Programming For the Beginner、Java Programming Tutorial、Perl from the Ground Up等。Michael現在阿肯色州北小石城普瓦斯基技術學院當講師,教授計算機信息系統。他還是北小石城阿肯色大學的兼職講師,教授信息科學。在做講師之前,他曾是阿肯色兒童醫院的一名程序設計師/分析師,負責統計計算和數據分析。