●章算法概述
1.1什麼是算法1
1.2算法的發展歷史和分類2
1.3算法與相關概念的區別3
1.3.1算法和公式的關繫4
1.3.2算法與程序的關繫4
1.3.3算法與數據結構的關繫4
1.4算法是計算機科學的靈魂5
1.5算法的表示6
1.5.1自然語言表示6
1.5.2流程圖表示6
1.5.3N-S圖表示8
1.5.4偽代碼表示8
1.6偽代碼與算法程序的對應9
1.6.1基本對應規則9
1.6.2分支結構10
1.6.3循環結構10
1.6.4數組及函數11
1.7算法的性能評價11
1.8算法實例12
1.8.1查找數字12
實例1-1:在擁有20個整數數據的數組中查找某個數據13
1.8.2創建項目14
1.8.3編譯執行15
1.9算法的新進展16
1.10小結:算法是程序設計的靈魂和基礎17
第2章數據結構
2.1數據結構概述18
2.1.1什麼是數據結構18
2.1.2數據結構中的基本概念19
2.1.3數據結構的內容19
2.1.4數據結構的分類21
2.1.5數據結構的幾種存儲方式21
2.1.6數據類型22
2.1.7常用的數據結構23
2.1.8選擇合適的數據結構解決實際問題24
2.2線性表24
2.2.1什麼是線性表24
2.2.2線性表的基本運算25
2.3順序表結構26
2.3.1準備數據26
2.3.2初始化順序表27
2.3.3計算順序表長度27
2.3.4插入結點27
2.3.5追加結點28
2.3.6刪除結點28
2.3.7查找結點29
2.3.8顯示所有結點29
2.3.9順序表操作示例30
實例2-1:對某班級學生學號、姓名和年齡數據進行順序表操作30
2.4鏈表結構33
2.4.1什麼是鏈表結構33
2.4.2準備數據34
2.4.3追加結點34
2.4.4插入頭結點35
2.4.5查找結點36
2.4.6插入結點37
2.4.7刪除結點38
2.4.8計算鏈表長度38
2.4.9顯示所有結點39
2.4.10鏈表操作示例39
實例2-2:使用鏈表操作實現用戶管理39
2.5棧結構43
2.5.1什麼是棧結構43
2.5.2準備數據44
2.5.3初始化棧結構44
2.5.4判斷空棧45
2.5.5判斷滿棧45
2.5.6清空棧.45
2.5.7釋放空間46
2.5.8入棧46
2.5.9出棧46
2.5.10讀結點數據47
2.5.11棧結構操作示例47
實例2-3:使用棧結構實現學生數據操作47
2.6隊列結構50
2.6.1什麼是隊列結構50
2.6.2準備數據50
2.6.3初始化隊列結構51
2.6.4判斷空隊列51
2.6.5判斷滿隊列52
2.6.6清空隊列52
2.6.7釋放空間52
2.6.8入隊列52
2.6.9出隊列53
2.6.10讀結點數據53
2.6.11計算隊列長度54
2.6.12隊列結構操作示例54
實例2-4:使用隊列結構實現學生數據操作54
2.7樹結構57
2.7.1什麼是樹結構57
2.7.2樹的基本概念58
2.7.3二叉樹58
2.7.4準備數據62
2.7.5初始化二叉樹62
2.7.6添加結點63
2.7.7查找結點64
2.7.8獲取左子樹65
2.7.9獲取右子樹65
2.7.10判斷空樹65
2.7.11計算二叉樹深度66
2.7.12清空二叉樹66
2.7.13顯示結點數據66
2.7.14遍歷二叉樹67
2.7.15樹結構操作示例69
實例2-5:經典二叉樹的遍歷(4種遍歷方式)69
2.8圖結構71
2.8.1什麼是圖結構71
2.8.2圖的基本概念72
2.8.3準備數據76
2.8.4創建圖78
2.8.5清空圖78
2.8.6顯示圖79
2.8.7遍歷圖79
2.8.8圖結構操作示例80
實例2-6:使用深度優先遍歷算法遍歷圖操作程序81
2.9小結:數據結構+算法=程序83
第3章基本算法思想
3.1常用算法思想概述84
3.2窮舉算法思想84
3.2.1窮舉算法基本思想85
3.2.2窮舉算法示例85
實例3-1:雞兔同籠問題85
3.3遞推算法思想87
3.3.1遞推算法基本思想87
3.3.2遞推算法示例87
實例3-2:兔子產仔問題87
3.4遞歸算法思想89
3.4.1遞歸算法基本思想89
3.4.2遞歸算法示例90
實例3-3:求數字12的階乘90
3.5分治算法思想91
3.5.1分治算法基本思想91
3.5.2分治算法示例91
實例3-4:從30枚銀幣中找出僅有的1枚假銀幣91
3.6概率算法思想95
3.6.1概率算法基本思想95
3.6.2概率算法示例95
實例3-5:利用蒙特卡羅算法計算圓周率π95
3.7貪心算法思想97
3.7.1貪心算法基本思想97
3.7.2貪心算法示例98
實例3-6:利用貪心算法思想兌換硬幣98
3.8小結:思路決定出路99
第4章排序算法
4.1排序算法概述100
4.2冒泡排序法101
4.2.1冒泡排序算法101
4.2.2冒泡排序算法示例102
實例4-1:對包含10個數字的整型數組進行排序102
4.3選擇排序法104
4.3.1選擇排序算法104
4.3.2選擇排序算法示例105
實例4-2:對包含10個數字的整型數組進行排序105
4.4插入排序法106
4.4.1插入排序算法107
4.4.2插入排序算法示例108
實例4-3:對包含10個數字的整型數組進行排序108
4.5Shell排序法109
4.5.1Shell排序算法109
4.5.2Shell排序算法示例111
實例4-4:對包含10個數字的整型數組進行排序111
4.6快速排序法112
4.6.1快速排序算法112
4.6.2快速排序算法示例114
實例4-5:對包含18個數字的整型數組進行排序114
4.7堆排序法116
4.7.1堆排序算法116
4.7.2堆排序算法示例120
實例4-6:對包含10個數字的整型數組進行排序120
4.8合並排序法122
4.8.1合並排序算法122
4.8.2合並排序算法示例125
實例4-7:對包含15個數字的整型數組進行排序125
4.9排序算法的效率128
4.10排序算法的其他應用128
4.10.1反序排序129
4.10.2反序插入排序算法示例129
實例4-8:對包含10個數字的整型數組進行排序129
4.10.3字符串的排序131
4.10.4字符串排序示例132
實例4-9:用快速排序算法對包含16個字母的字符串進行排序132
4.10.5字符串數組的排序133
4.10.6字符串數組排序示例134
實例4-10:用快速排序算法對包含5個單詞的字符串數組進行排序134
4.11小結:排序是最基本的算法136
第5章查找算法
5.1查找算法概述137
5.2順序查找138
5.2.1順序查找算法138
5.2.2順序查找操作示例138
實例5-1:在包含15個數字的數組中查找第7個數字138
5.3折半查找140
5.3.1折半查找算法140
5.3.2折半查找操作示例142
實例5-2:在包含15個數字的數組中查找1個數字142
5.4小結:查找是最基本的應用144
……
內容簡介
計算機技術的發展和普及改變了人們的生活和工作方式,也改變了人們的娛樂方式,其中尤為重要的是計算機編程技術。現代的設計任務大多通過代碼編程完成,其中算法起到了至關重要的作用。可以毫不誇張地說,算法是一切程序設計的靈魂和基礎。本書知識點覆蓋全面、結構安排緊湊、講解詳細、示例豐富。全書對每一個知識點都給出了相應的算法及應用示例(重點章節同時在文中相應位置給出了即掃即看的視頻二維碼)。雖然這些示例都是以C語言編寫的,但是算法並不僅僅局限於C語言。如果讀者采用其他編程語言,如C++、C#、VB、Java等,根據其語法格式進行適當的修改也可使用。隨書附贈的二維碼包中包含45講、超過10小時的C/C++算法講解視頻,讓讀者所獲更超值。