More Effective C#中文版:寫出良好C#程式的50個具體做法 (2版)
相關熱銷的書籍推薦給您
【簡介】
涵蓋C# 7.0
在《More Effective C# 中文版 第二版》中,世界知名的.NET專家Bill Wagner指出並解說50個特定強大與效能良好的C# 7.0中高級技巧。針對可能遇到的問題,提出強而有力的新解法,以因應越來越複雜的C#語言與日漸龐大的開發社群。
歷經三個版本的《Effective C#》,Wagner清楚的解釋、專業的建議與實際範例程式碼,已被證明對成千上百位開發者而言是無價的。《More Effective C#,第二版》以經過驗證的相同方式介紹C# 7.0新功能,協助你更有效率地執行熟悉工作。
基於卓越的C#經驗,以及在全球C#標準委員會的關鍵性角色,Wagner強調以物件導向、函數式及服務導向的方式,以C#處理資料、以更好的方式向使用者與其他程式設計師表達您的用意、以及運用強大的非同步與動態程式設計。
●使用屬性取代可存取的資料成員(做法1)
●區分實質與參考型別(做法4)
●了解多種相等概念之間的關係(做法9)
●在你的API中避免轉換運算子(做法11)
●了解介面與virtual methods之間差異(做法15)
●避免在基底類別中定義方法多載(做法19)
●建立清楚的、最少的、以及完整的方法群(做法22)
●在iterators 及async方法中使用區域函式啟動立即錯誤回報(做法26)
●非同步工作中使用async方法(做法27)
●避免執行緒配置與context switches(做法30)
●建構有考慮例外情況的平行演算法(做法36)
●使用執行緒區集取代建立執行緒(做法37)
●使用BackgroundWorker做跨執行緒通訊(做法38)
●了解動態程式設計的利弊(做法43)
●了解如何運用expression API(做法46)
●在公開的APIs中減少動態物件的使用(做法47)
你已經是一位成功的C#程式設計師,本書會使你更為出色。
【目錄】
前言
第 1 章 處理資料型別
作法 01 使用屬性取代可存取的資料成員
作法 02 可變動的資料優先使用隱藏屬性
作法 03 實值型別優先使其具不可變性
作法 04 區分實值與參考型別
作法 05 確保 0 是實值型別的有效狀態
作法 06 確保屬性運作如資料一般
作法 07 使用 Tuples 限制型別的範圍
作法 08 在匿名型別上定義區域函式
作法 09 了解多種相等概念之間的關係
作法 10 了解 GetHashCode() 的陷阱
第 2 章 API 設計
作法 11 在你的 API 中避免轉換運算子
作法 12 使用選擇性引數減少方法的多載
作法 13 限制型別的可見性
作法 14 優先定義並實作介面進行繼承
作法 15 了解介面與 Virtual Method 之間差異
作法 16 為通知實作事件模式
作法 17 避免傳回內部類別物件的參考
作法 18 優先使用 Override 替代 Event Handler
作法 19 避免在基底類別中定義方法多載
作法 20 了解事件如何增進物件之間執行期的耦合
作法 21 只宣告 Nonvirtual Event
作法 22 建立清楚的、最少的,以及完整的方法群
作法 23 部分類別的建構函式、更動子與 Event handler 使用部分方法
作法 24 避免使用 ICloneable,因為它限制你的設計選擇
作法 25 Array 引數限制只使用 params 陣列
作法 26 在 Iterators 與 Async 方法中使用區域函式啟動立即錯誤回報
第 3 章 以Task 為基礎的非同步程式設計
作法 27 非同步工作使用 Async 方法
作法 28 永遠不要寫 async void 方法
作法 29 避免結合同步與非同步方法
作法 30 避免執行緒配置及 Context Switches
作法 31 避免非必要的封送處理(Marshalling)Context
作法 32 使用 Task 物件合成非同步工作
作法 33 考慮實作 Task 取消協定(Task Cancellation Protocol)
作法 34 緩衝擴充的非同步回傳值
第 4 章 平行處理
作法 35 學習 PLINQ 如何實作平行演算法
作法 36 建構有考慮例外情況的平行演算法
作法 37 使用執行緒區集取代建立執行緒
作法 38 使用 BackgroundWorker 做跨執行緒通訊
作法 39 了解 XAML 環境中的跨執行緒呼叫
作法 40 使用 lock() 作為同步處理的首選
作法 41 鎖定 Handles 使用最小可能的範圍
作法 42 避免在鎖定的區段呼叫不明的程式碼
第 5 章 動態程式設計
作法 43 了解動態程式設計的利弊
作法 44 透過動態型別運用泛型引數執行期的型別
作法 45 資料驅動(Data-Driven)動態型別使用 DynamicObject 或
IDynamicMetaObjectProvider
作法 46 了解如何運用 Expression API
作法 47 在公開的 API 中減少動態物件的使用
第 6 章 參與全球C# 社群
作法 48 尋求最好的答案,而不是最受歡迎的答案
作法 49 參與規格及程式碼的訂定
作法 50 考慮用分析器自動化慣用法
立即查看
圖解資料結構 × 演算法:運用C語言(暢銷回饋版) (2版)
類似書籍推薦給您
【簡介】
學習資料結構與演算法的好書,暢銷回饋中!
資料結構是有志從事資訊工作的專業人員,不得不重視的一門基礎課程。對於第一次接觸資料結構課程的初學者來說,過多的內容及不清楚的表達常是造成學習障礙的最主要原因。本書是以C程式語言實作來解說資料結構概念的入門書,內容淺顯易懂,藉由豐富圖例來闡述基本概念,將重要理論、演算法做最意簡言明的詮釋及舉例,同時配合完整的範例程式碼,期能透過實作來熟悉資料結構。因此,這是一本兼具內容及專業的資料結構教學用書。
【本書特色】
※內容架構完整,邏輯清楚,採用豐富的圖例來闡述基本觀念及應用,有效提高可讀性。
※以C語言實作資料結構中的重要理論,以範例程式說明資料結構的內涵。
※強調邊作邊學:提供書中範例完整程式檔,給予最完整的支援,加深學習記憶。
※驗收學習成果:參閱國家考試題型,設計難易適中的習題,提供進一步演練。
【重點主題】
◆ 資料結構入門與演算法
◆ 陣列結構 / 串列結構
◆ 堆疊 / 佇列
◆ 樹狀結構 / 圖形結構
◆ 排序演算法
◆ 搜尋演算法與雜湊函數
◆ 資料結構專有名詞
【目錄】
Chapter 1 資料結構入門與演算法
1-1 資料結構的定義
1-1-1 資料與資訊
1-1-2 資料的特性
1-1-3 資料結構的應用
1-2 演算法
1-2-1 演算法的條件
1-2-2 演算法的表現方式
1-3 常見演算法簡介
1-3-1 分治法
1-3-2 貪心法
1-3-3 枚舉法
1-3-4 巴斯卡三角形演算法
1-3-5 質數求解演算法
1-4 演算法效能分析
1-4-1 Big-oh
1-4-2 Ω(omega)
1-4-3 θ(theta)
Chapter 2 陣列結構
2-1 線性串列簡介
2-1-1 儲存結構簡介
2-2 認識陣列
2-2-1 二維陣列
2-2-2 三維陣列
2-2-3 n 維陣列
2-3 矩陣
2-3-1 矩陣相加
2-3-2 矩陣相乘
2-3-3 轉置矩陣
2-3-4 稀疏矩陣
2-3-5 上三角形矩陣
2-3-6 下三角形矩陣
2-3-7 帶狀矩陣
2-4 陣列與多項式
2-4-1 認識多項式
Chapter 3 串列結構
3-1 動態配置記憶體
3-1-1 動態配置變數
3-2 單向串列
3-2-1 建立單向串列
3-2-2 走訪單向串列
3-2-3 單向串列插入新節點
3-2-4 單向串列刪除節點
3-2-5 單向串列的反轉
3-2-6 單向串列的連結
3-2-7 多項式串列表示法
3-3 環狀串列結構
3-3-1 環狀串列的建立與走訪
3-3-2 環狀串列的插入節點
3-3-3 環狀串列的刪除節點
3-3-4 環狀串列的連結
3-3-5 稀疏矩陣的環狀串列表示法
3-4 雙向串列
3-4-1 雙向串列的建立與走訪
3-4-2 雙向串列加入新節點
3-4-3 雙向串列刪除節點
Chapter 4 堆疊
4-1 堆疊簡介
4-1-1 陣列實作堆疊
4-1-2 串列實作堆疊
4-2 堆疊的應用
4-2-1 遞迴演算法
4-2-2 動態規劃演算法
4-2-3 河內塔問題
4-2-4 回溯法-老鼠走迷宮
4-2-5 八皇后問題
4-3 算術運算式的表示法
4-3-1 中序轉為前序與後序
4-3-2 前序與後序轉為中序
4-3-3 中序表示法求值
4-3-4 前序表示法求值
4-3-5 後序表示法求值
Chapter 5 佇列
5-1 認識佇列
5-1-1 佇列的工作運算
5-1-2 佇列的應用
5-1-3 陣列實作佇列
5-1-4 串列實作佇列
5-2 環狀佇列、雙向佇列與優先佇列
5-2-1 環狀佇列
5-2-2 雙向佇列
5-2-3 優先佇列
Chapter 6 樹狀結構
6-1 樹的基本觀念
6-1-1 樹專有名詞簡介
6-2 二元樹簡介
6-2-1 二元樹的定義
6-2-2 特殊二元樹簡介
6-3 二元樹儲存方式
6-3-1 陣列表示法
6-3-2 串列表示法
6-4 二元樹走訪
6-4-1 中序走訪
6-4-2 後序走訪
6-4-3 前序走訪
6-4-4 二元樹節點插入與刪除
6-4-5 二元運算樹
6-5 引線二元樹
6-5-1 二元樹轉為引線二元樹
6-6 樹的二元樹表示法
6-6-1 樹化為二元樹
6-6-2 二元樹轉換成樹
6-6-3 樹林化為二元樹
6-6-4 二元樹轉換成樹林
6-6-5 樹與樹林的走訪
6-6-6 決定唯一二元樹
6-7 最佳化二元搜尋樹
6-7-1 延伸二元樹
6-7-2 霍夫曼樹
6-8 平衡樹
6-8-1 平衡樹的定義
6-9 進階樹狀結構的應用
6-9-1 決策樹
6-9-2 B 樹
6-9-3 二元空間分割樹(BSP)
6-9-4 四元樹/八元樹
Chapter 7 圖形結構
7-1 圖形簡介
7-1-1 尤拉環與尤拉鏈
7-1-2 圖形的定義
7-1-3 無向圖形
7-1-4 有向圖形
7-2 圖形的資料表示法
7-2-1 相鄰矩陣法
7-2-2 相鄰串列法
7-2-3 相鄰複合串列法
7-2-4 索引表格法
7-3 圖形的走訪
7-3-1 先深後廣法
7-3-2 先廣後深法
7-4 擴張樹簡介
7-4-1 DFS擴張樹及BFS擴張樹
7-4-2 最小花費擴張樹
7-4-3 Kruskal演算法
7-4-4 Prim演算法
7-5 圖形最短路徑
7-5-1 單點對全部頂點
7-5-2 兩兩頂點間的最短路徑
7-5-3 A*演算法
7-6 AOV網路與拓樸排序
7-6-1 拓樸序列簡介
7-7 AOE網路
7-7-1 臨界路徑
Chapter 8 排序演算法
8-1 認識排序
8-1-1 排序的分類
8-1-2 排序演算法分析
8-2 內部排序法
8-2-1 氣泡排序法
8-2-2 選擇排序法
8-2-3 插入排序法
8-2-4 謝耳排序法
8-2-5 合併排序法
8-2-6 快速排序法
8-2-7 堆積排序法
8-2-8 基數排序法
8-3 外部排序法
8-3-1 直接合併排序法
8-3-2 k 路合併法
Chapter 9 搜尋演算法與雜湊函數
9-1 常見搜尋演算法
9-1-1 循序搜尋法
9-1-2 二分搜尋法
9-1-3 內插搜尋法
9-1-4 費氏搜尋法
9-2 雜湊搜尋法
9-2-1 雜湊函數簡介
9-3 常見雜湊函數
9-3-1 除法
9-3-2 中間平方法
9-3-3 折疊法
9-3-4 數位分析法
9-4 碰撞與溢位處理
9-4-1 線性探測法
9-4-2 平方探測法
9-4-3 再雜湊法
9-4-4 鏈結串列法
附錄A 資料結構專有名詞索引
立即查看
圖解資料結構 × 演算法:運用 C++ 結合 ChatGPT 輔助驗證及寫程式 (1版)
類似書籍推薦給您
內容簡介
AI 再進化!
使用 ChatGPT 高效率生成 C++ 語言程式碼
資料結構一直以來都在電腦科學領域扮演著極為重要的基礎課程角色。無論是資訊、資工、資管、應用數學、電腦科學、或計算機等相關科系,資料結構通常都是必須學習的科目。近年來,甚至包括電機、電子和商學管理等科系也都將其納入選修課程。此外,資料結構在轉學考、研究所考試、以及國家的高、普、特考中也都是必考科目。這表示不論是以應付考試的視角或者是追求資訊科學學問的視角,資料結構都是不可或缺的;特別是對於那些志向投身資訊科學領域的專業人士。
對於初次接觸資料結構課程的新手來說,過多的內容以及晦澀難懂的表達方式經常成為學習的主要障礙。這本書以 C++ 程式語言實作為載體,詳細解釋資料結構的基本概念,並透過豐富的圖例來闡釋這些概念。我們致力於以精簡、清晰的方式呈現重要的理論和演算法,同時提供完整的範例程式碼,讓讀者透過實際操作熟悉掌握資料結構的知識。
此外,透過人工智慧的協助,我們能夠更深入地探索資料結構。也因此本書特別設計了作者與 ChatGPT 問答的欄位,以及由 ChatGPT 所產生的程式碼範例,讓讀者能夠比較人工智慧生成的程式碼與傳統方式編寫的程式碼之間的區別,進一步理解人工智慧在資訊科學領域的應用。
◇特別提供◇
——————————————————
ChatGPT 生成程式碼
——————————————————
可與人工編寫程式碼相互比較作為參考!
|本書範例程式碼檔案,請至博碩官網下載|
本書特色
☑ 完整的內容結構和清晰的邏輯,豐富的圖例解說提高可讀性
☑ 使用 C++ 語言實作資料結構理論,並透過範例程式碼深入解析
☑ 參閱國家考試題型設計難易適中的習題,立即檢驗學習效果
☑ 附錄彙整出資料結構相關的專有名詞,方便查詢加深學習印象
☑ 增加「向 ChatGPT 提問」、「ChatGPT 解決觀點」欄位,提高學習效率
目錄
Chapter 0 ChatGPT 與 C 語言程式設計黃金入門課
0-1 認識聊天機器人
0-1-1 聊天機器人的種類
0-2 ChatGPT 初體驗
0-2-1 註冊免費 ChatGPT 帳號
0-2-2 更換新的機器人
0-2-3 登出 ChatGPT
0-3 使用 ChatGPT 寫 C++ 語言程式
0-3-1 利用 ChatGPT AI 撰寫 C++ 語言程式
0-3-2 複製 ChatGPT 幫忙寫的程式碼
0-3-3 費伯那序列的遞迴程式
0-3-4 利用 ChatGPT AI 撰寫萬年曆
0-4 課堂上學不到的 ChatGPT 使用秘訣
0-4-1 能記錄對話內容
0-4-2 專業問題可事先安排人物設定腳本
0-4-3 目前只回答2021年前
0-4-4 善用英文及 Google 翻譯工具
0-4-5 熟悉重要指令
0-4-6 充份利用其它網站的 ChatGPT 相關資源
Chapter 1 資料結構入門與演算法
1-1 資料結構的定義
1-1-1 資料與資訊
1-1-2 資料的特性
1-1-3 資料結構的應用
1-2演算法
1-2-1 演算法的條件
1-2-2 演算法的表現方式
1-3 常見演算法簡介
1-3-1 分治法
1-3-2 貪心法
1-3-3 枚舉法
1-3-4 巴斯卡三角形演算法
1-3-5 質數求解演算法
1-4 演算法效能分析
1-4-1 Big-oh
1-4-2 Ω(omega)
1-4-3 θ(theta)
Chapter 2 陣列結構
2-1 線性串列簡介
2-1-1 儲存結構簡介
2-2 認識陣列
2-2-1 二維陣列
2-2-2 三維陣列
2-2-3 n維陣列
2-3 矩陣
2-3-1 矩陣相加
2-3-2 矩陣相乘
2-3-3 轉置矩陣
2-3-4 稀疏矩陣
2-3-5 上三角形矩陣
2-3-6 下三角形矩陣
2-3-7 帶狀矩陣
2-4 陣列與多項式
2-4-1 認識多項式
Chapter 3 串列結構
3-1 動態配置記憶體
3-1-1 C++ 的動態配置變數
3-1-2 動態配置陣列
3-2 單向串列
3-2-1 單向串列的建立與走訪
3-2-2 單向串列插入新節點
3-2-3 單向串列刪除節點
3-2-4 單向串列的反轉與連結
3-2-5 多項式表示法
3-3 環狀串列
3-3-1 環狀串列的插入節點
3-3-2 環狀串列的刪除節點
3-3-3 環狀串列的連結
3-3-4 稀疏矩陣的環狀串列表示法
3-4 雙向串列
3-4-1 雙向串列的建立與走訪
3-4-2 雙向串列插入節點
3-4-3 雙向串列刪除節點
Chapter 4 堆疊
4-1 堆疊簡介
4-1-1 陣列實作堆疊
4-1-2 串列實作堆疊
4-1-3 堆疊類別樣板實作
4-2 堆疊的應用
4-2-1 遞迴演算法
4-2-2 費伯那序列
4-2-3 動態規劃演算法
4-2-4 河內塔問題
4-2-5 回溯法 - 老鼠走迷宮
4-2-6 八皇后問題
4-3 算術運算式的表示法
4-3-1 中序轉為前序與後序
4-3-2 前序與後序轉為中序
4-3-3 中序表示法求值
4-3-4 前序表示法求值
4-3-5 後序表示法求值
Chapter 5 佇列
5-1 認識佇列
5-1-1 佇列的工作運算
5-1-2 陣列實作佇列
5-1-3 串列實作佇列
5-2 佇列的相關應用
5-2-1 環狀佇列
5-3 雙向佇列
5-4 優先佇列
Chapter 6 樹狀結構
6-1 樹的基本觀念
6-1-1 樹專有名詞簡介
6-2 二元樹簡介
6-2-1 二元樹的定義
6-2-2 特殊二元樹簡介
6-3 二元樹儲存方式
6-3-1 陣列表示法
6-3-2 串列表示法
6-4 二元樹走訪
6-4-1 中序走訪
6-4-2 後序走訪
6-4-3 前序走訪
6-4-4 節點插入與刪除
6-4-5 二元運算樹
6-5 引線二元樹
6-5-1 二元樹轉為引線二元樹
6-6 樹的二元樹表示法
6-6-1 樹化為二元樹
6-6-2 二元樹轉換成樹
6-6-3 樹林化為二元樹
6-6-4 二元樹轉換成樹林
6-6-5 樹與樹林的走訪
6-6-6 決定唯一二元樹
6-7 最佳化二元搜尋樹
6-7-1 延伸二元樹
6-7-2 霍夫曼樹
6-8 平衡樹
6-8-1 平衡樹的定義
6-9 進階樹狀結構的應用
6-9-1 決策樹
6-9-2 B樹
6-9-3 二元空間分割樹(BSP)
6-9-4 四元樹/八元樹
Chapter 7 圖形結構
7-1 圖形簡介
7-1-1 尤拉環與尤拉鏈
7-1-2 圖形的定義
7-1-3 無向圖形
7-1-4 有向圖形
7-2 圖形的資料表示法
7-2-1 相鄰矩陣法
7-2-2 相鄰串列法
7-2-3 相鄰複合串列法
7-2-4 索引表格法
7-3 圖形的走訪
7-3-1 先深後廣法
7-3-2 先廣後深搜尋法
7-4 擴張樹簡介
7-4-1 DFS 擴張樹及 BFS 擴張樹
7-4-2 最小花費擴張樹
7-4-3 Kruskal 演算法
7-4-4 Prim 演算法
7-5 圖形最短路徑
7-5-1 單點對全部頂點
7-5-2 兩兩頂點間的最短路徑
7-5-3 A*演算法
7-6 AOV 網路與拓樸排序
7-6-1 拓樸序列簡介
7-7 AOE網路
7-7-1 臨界路徑
Chapter 8 排序演算法
8-1 認識排序
8-1-1 排序的分類
8-1-2 排序演算法分析
8-2 內部排序法
8-2-1 氣泡排序法
8-2-2 選擇排序法
8-2-3 插入排序法
8-2-4 謝耳排序法
8-2-5 合併排序法
8-2-6 快速排序法
8-2-7 堆積排序法
8-2-8 基數排序法
8-3 外部排序法
8-3-1 直接合併排序法
8-3-2 k路合併法
Chapter 9 搜尋演算法與雜湊函數
9-1 常見搜尋演算法
9-1-1 循序搜尋法
9-1-2 二分搜尋法
9-1-3 內插搜尋法
9-1-4 費氏搜尋法
9-2 雜湊搜尋法
9-2-1 雜湊函數簡介
9-3 常見雜湊函數
9-3-1 除法
9-3-2 中間平方法
9-3-3 折疊法
9-3-4 數位分析法
9-4 碰撞與溢位處理
9-4-1 線性探測法
9-4-2 平方探測法
9-4-3 再雜湊法
9-4-4 鏈結串列法
附錄A 資料結構專有名詞索引
立即查看
圖解資料結構 × 演算法:運用C# (1版)
類似書籍推薦給您
立即查看
圖解資料結構 × 演算法:運用C++ (1版)
類似書籍推薦給您
圖解資料結構 × 演算法:運用C++
系列名:單行本
ISBN13:9786263332881
出版社:博碩文化
作者:胡昭民
裝訂/頁數:平裝/496頁
規格:23cm*17cm*2.2cm (高/寬/厚)
出版日:2022/10/20
中國圖書分類:電腦系統資料相關處理
內容簡介
資料結構是有志從事資訊工作的專業人員,不得不重視的一門基礎課程。對於第一次接觸資料結構課程的初學者來說,過多的內容及不清楚的表達常是造成學習障礙的最主要原因。本書是以C++程式語言實作來解說資料結構概念的入門書,內容淺顯易懂,藉由豐富圖例來闡述基本概念,將重要理論、演算法做最意簡言明的詮釋及舉例,同時配合完整的範例程式碼,期能透過實作來熟悉資料結構。因此,這是一本兼具內容及專業的資料結構教學用書。
【重點主題】
◆ 資料結構入門與演算法
◆ 陣列結構 / 串列結構
◆ 堆疊 / 佇列
◆ 樹狀結構 / 圖形結構
◆ 排序演算法
◆ 搜尋演算法與雜湊函數
◆ 資料結構專有名詞
本書特色
※內容架構完整,邏輯清楚,採用豐富的圖例來闡述基本觀念及應用,有效提高可讀性。
※以C++語言實作資料結構中的重要理論,以範例程式說明資料結構的內涵。
※強調邊作邊學:提供書中範例完整程式檔,給予最完整的支援,加深學習記憶。
※驗收學習成果:參閱國家考試題型,設計難易適中的習題,提供進一步演練。
目錄
Chapter 1 資料結構入門與演算法
1-1 資料結構的定義
1-1-1 資料與資訊
1-1-2 資料的特性
1-1-3 資料結構的應用
1-2 演算法
1-2-1 演算法的條件
1-2-2 演算法的表現方式
1-3 常見演算法簡介
1-3-1 分治法
1-3-2 貪心法
1-3-3 枚舉法
1-3-4 巴斯卡三角形演算法
1-3-5 質數求解演算法
1-4 演算法效能分析
1-4-1 Big-oh
1-4-2 Ω(omega)
1-4-3 θ(theta)
Chapter 2 陣列結構
2-1 線性串列簡介
2-1-1 儲存結構簡介
2-2 認識陣列
2-2-1 二維陣列
2-2-2 三維陣列
2-2-3 n 維陣列
2-3 矩陣
2-3-1 矩陣相加
2-3-2 矩陣相乘
2-3-3 轉置矩陣
2-3-4 稀疏矩陣
2-3-5 上三角形矩陣
2-3-6 下三角形矩陣
2-3-7 帶狀矩陣
2-4 陣列與多項式
2-4-1 認識多項式
Chapter 3 串列結構
3-1 動態配置記憶體
3-1-1 C++ 的動態配置變數
3-1-2 動態配置陣列
3-2 單向串列
3-2-1 單向串列的建立與走訪
3-2-2 單向串列插入新節點
3-2-3 單向串列刪除節點
3-2-4 單向串列的反轉與連結
3-2-5 多項式表示法
3-3 環狀串列
3-3-1 環狀串列插入節點
3-3-2 環狀串列刪除節點
3-3-3 環狀串列的連結
3-3-4 稀疏矩陣的環狀串列表示法
3-4 雙向串列
3-4-1 雙向串列的建立與走訪
3-4-2 雙向串列插入節點
3-4-3 雙向串列刪除節點
Chapter 4 堆疊
4-1 堆疊簡介
4-1-1 陣列實作堆疊
4-1-2 串列實作堆疊
4-1-3 推疊類別樣板實作
4-2 堆疊的應用
4-2-1 遞迴演算法
4-2-2 費伯那序列
4-2-3 動態規劃演算法
4-2-4 河內塔問題
4-2-5 回溯法-老鼠走迷宮
4-2-6 八皇后問題
4-3 算術運算式的表示法
4-3-1 中序轉為前序與後序
4-3-2 前序與後序轉為中序
4-3-3 中序表示法求值
4-3-4 前序法的求值運算
4-3-5 後序法的求值運算
Chapter 5 佇列
5-1 認識佇列
5-1-1 佇列的工作運算
5-1-2 陣列實作佇列
5-1-3 串列實作佇列
5-2 佇列的相關應用
5-2-1 環狀佇列
5-3 雙向佇列
5-4 優先佇列
Chapter 6 樹狀結構
6-1 樹的基本觀念
6-1-1 樹專有名詞簡介
6-2 二元樹簡介
6-2-1 二元樹的定義
6-2-2 特殊二元樹簡介
6-3 二元樹儲存方式
6-3-1 陣列表示法
6-3-2 串列表示法
6-4 二元樹走訪
6-4-1 中序走訪
6-4-2 後序走訪
6-4-3 前序走訪
6-4-4 節點插入與刪除
6-4-5 二元運算樹
6-5 引線二元樹
6-5-1 二元樹轉為引線二元樹
6-6 樹的二元樹表示法
6-6-1 樹化為二元樹
6-6-2 二元樹轉換成樹
6-6-3 樹林化為二元樹
6-6-4 二元樹轉換成樹林
6-6-5 樹與樹林的走訪
6-6-6 決定唯一二元樹
6-7 最佳化二元搜尋樹
6-7-1 延伸二元樹
6-7-2 霍夫曼樹
6-8 平衡樹
6-8-1 平衡樹的定義
6-9 進階樹狀結構的應用
6-9-1 決策樹
6-9-2 B 樹
6-9-3 二元空間分割樹(BSP)
6-9-4 四元樹/八元樹
Chapter 7 圖形結構
7-1 圖形簡介
7-1-1 尤拉環與尤拉鏈
7-1-2 圖形的定義
7-1-3 無向圖形
7-1-4 有向圖形
7-2 圖形表示法
7-2-1 相鄰矩陣法
7-2-2 相鄰串列法
7-2-3 相鄰複合串列法
7-2-4 索引表格法
7-3 圖形的走訪
7-3-1 先深後廣法
7-3-2 先廣後深搜尋法
7-4 擴張樹簡介
7-4-1 DFS擴張樹及BFS擴張樹
7-4-2 最小花費擴張樹
7-4-3 Kruskal演算法
7-4-4 Prim演算法
7-5 圖形最短路徑
7-5-1 單點對全部頂點
7-5-2 兩兩頂點間的最短路徑
7-5-3 A*演算法
7-6 AOV網路與拓樸排序
7-6-1 拓樸序列簡介
7-7 AOE網路
7-7-1 臨界路徑
Chapter 8 排序演算法
8-1 認識排序
8-1-1 排序的分類
8-1-2 排序演算法分析
8-2 內部排序法
8-2-1 氣泡排序法
8-2-2 選擇排序法
8-2-3 插入排序法
8-2-4 謝耳排序法
8-2-5 合併排序法
8-2-6 快速排序法
8-2-7 堆積排序法
8-2-8 基數排序法
8-3 外部排序法
8-3-1 直接合併排序法
8-3-2 k 路合併法
Chapter 9 搜尋演算法與雜湊函數
9-1 常見搜尋演算法
9-1-1 循序搜尋法
9-1-2 二分搜尋法
9-1-3 內插搜尋法
9-1-4 費氏搜尋法
9-2 雜湊搜尋法
9-2-1 雜湊函數簡介
9-3 常見雜湊函數
9-3-1 除法
9-3-2 中間平方法
9-3-3 折疊法
9-3-4 數位分析法
9-4 碰撞與溢位處理
9-4-1 線性探測法
9-4-2 平方探測法
9-4-3 再雜湊法
9-4-4 鏈結串列法
附錄A 資料結構專有名詞索引
立即查看
超圖解 C語言--用資料結構×演算法突破 APCS (1版)
類似書籍推薦給您
本書是專為有志往資訊科系發展的讀者所設計,具有以下幾項特色:
□ 【紮實基礎教學】:全面涵蓋 C 語言各項主題,沒學過程式設計也可從本書開始入門。主題涵蓋基本語法、函式、陣列、遞迴、指標與多維陣列、動態記憶體配置、前置處理器、結構體與自訂資料型態、到檔案輸出入等,不限於 APCS 檢測範圍,更為未來鋪路。
□ 【超圖解觀念解說】:程式設計抽象概念往往是初學者卡關主因,本書作者親手繪製數百張圖解以及流程圖具像呈現程式設計抽象觀念,易讀又好理解。
□ 【線上開發環境】:學習程式設計就是要動手練習,本書採用線上開發環境,不需安裝軟體,只要打開瀏覽器,就可以開始動手寫程式,甚至在手機、平板上都沒問題。
在 APCS 檢定的準備上,則是採取以下策略:
□ 【從思維邏輯解題】:著重解決問題的思維邏輯,帶你用紙筆解析問題,思考解法。
□ 【單一程式語言】:APCS 的觀念題以 C 語言出題,學 C 語言無可避免,本書實作題也採用 C 語言,只要專心學習單一語言,不需要同時學習兩種語言,以免耗時又容易混淆觀念。
□ 【資料結構與演算法】:帶你思考如何善用資料儲存方法或是執行步驟,讓程式更簡潔、更有效率。涵蓋堆疊、佇列、鏈節串列、樹狀結構、圖形等基本資料結構,以及排序、動態規劃、回溯、雜湊等關鍵演算法。
本書不限定在 APCS 的範疇,也為未來往軟體工程師做準備,包含以下延伸內容:
□ 【業界軟體工具】:gcc 編譯指令、make 專案建置、gdb 除錯程式等實務軟體工作現場必備的工具,為未來進入職場做好準備。
□ 【進階程式主題】:檔案輸出入、動態記憶體配置、模組化程式設計、文字編碼等。另外,本書也提供有 C++ 附錄,對於想要進一步瞭解 C++ 的讀者,快速介紹 C++ 與 C 的差異,並且針對最核心的物件導向概念,做了深入淺出的介紹。
本書特色:
□ 從基本語法、函式、陣列、遞迴、指標與多維陣列、動態記憶體配置、前置處理器、結構體與自訂資料型態、到檔案輸出入,完整打好基礎
□ 線上編譯環境,開瀏覽器就可立即練習
□ APCS 觀念題實戰演練,驗證學習成效
□ APCS 實作模擬題解析,熟練思考邏輯
□ ○/✗對照示範,建立程式正確觀念
□ 用流程圖輔助,具像理解程式邏輯
□ 涵蓋鏈結串列、樹狀結構、圖形、堆疊、佇列等基本資料結構
□ 涵蓋搜尋、排序、動態規劃、回溯法、雜湊等關鍵演算法
□ 包含 C++ 簡介附錄,提供進一步探索 C++ 的敲門磚
□ gcc、make、gdb 等開發工具簡介,跨入軟體開發專業領域
目錄大綱
目錄:
第 1 章 認識 C 語言、資料結構和演算法
1-1 認識 C 程式語言
1-2 C 語言的基本結構和執行流程
1-3 電腦語言翻譯機:編譯器和直譯器
1-4 資料結構和演算法
| APCS 觀念題練習
第 2 章 數學運算子、變數與資料型態
2-1 運算子、變數和常數
2-2 運算式
| APCS 觀念題練習
2-3 整數和浮點數資料型態
| APCS 觀念題練習
2-4 printf():合併字串和資料
2-5 整理程式演算思緒的好幫手:虛擬碼和流程圖
| APCS 觀念題練習
第 3 章 字串、字元編碼與自訂函式
3-1 確認資料型態大小以及注意事項
3-2 字元與字串資料型態
| APCS 觀念題練習
3-3 建立自訂函式
3-4 變數的儲存等級、有效範圍和生命週期
| APCS 觀念題練習
第 4 章 流程控制:選擇 (selection) 與迴圈 (iteration) 敘述
4-1 讀取鍵盤輸入資料的 scanf() 函式
4-2 改變程式流程的 if 條件式
4-3 條件運算子
| APCS 觀念題練習
4-4 switch…case 控制結構
4-5 努力不懈的迴圈
4-6 使用輾轉相除法求最大公因數
4-7 continue 和 break 指令
| APCS 觀念題練習
| APCS 實作題 購物車(堆積木)
第 5 章 排列與隨機
5-1 內容不可改變的「常數」
5-2 產生隨機數字
5-3 排列圖案
5-4 常用的數學函式
5-5 判斷某數字是否為「阿姆斯壯數」
| APCS 觀念題練習
| APCS 實作題 辨別三角形
第 6 章 陣列與字串
6-1 基本資料結構:陣列
6-2 處理字串資料
6-3 文字位移加密(shift cipher)
6-4 刪除字串裡的空白字元
6-5 運用 string.h 函式庫處理字串
6-6 使用 strtok() 函式切割、擷取子字串
6-7 檢測迴文句子以及變數的有效範圍
6-8 計算大數據
| APCS 觀念題練習
| APCS 實作題 修補圍籬 (壽司拼盤)
| APCS 實作題 猜拳遊戲(甲蟲爭霸戰)
第 7 章 遞迴和堆疊
7-1 遞迴:函式呼叫自己
7-2 認識「堆疊」記憶體區域和資料結構
7-3 利用 pythontutor.com 觀察程式運作狀況
7-4 河內塔問題
| APCS 觀念題練習
第 8 章 指標與多維陣列
8-1 取址運算子與指標運算子
8-2 指標與加減運算
8-3 二維陣列:表格式資料
8-4 用二維陣列儲存多筆字串資料
8-5 帕斯卡三角形和二項式係數
| APCS 觀念題練習
| APCS 實作題 矩陣總和
第 9 章 前置處理器、標頭檔與程式模組
9-1 外部 C 程式檔
9-2 前置處理指令與標頭檔
9-3 再談 extern(外部)與 static(靜態)儲存等級
9-4 #define:定義巨集
9-5 條件編譯
| APCS 觀念題練習
| APCS 實作題 矩陣轉置
第 10 章 自訂資料型態
10-1 列舉型態 enum
10-2 結構體(struct)
10-3 結構體陣列
10-4 在函式中使用結構體
10-5 讓記憶體空間華麗轉身的 union 自訂型態
10-6 位元欄位(bit-field)與位元資料操作
10-7 位元運算子(bitwise operator)與位移運算
10-8 互斥或(XOR)加密和解密
| APCS 觀念題練習
| APCS 實作題 邏輯運算子
第 11 章 演算法、資料排序和搜尋
11-1 測量執行程式的花費時間
11-2 評估演算法效率和大 O 符號
11-3 資料排序
11-4 氣泡排序原理與實作
11-5 快速排序原理與實作
11-6 求取中位數
11-7 二分搜尋法
| APCS 觀念題練習
| APCS 實作題 購買力計算
| APCS 實作題 成績指標
| APCS 實作題 線段覆蓋長度
| APCS 實作題 基地台覆蓋問題
第 12 章 動態配置記憶體與鏈接串列資料結構
12-1 動態配置記憶體
12-2 函式中的雙重指標參數
12-3 鏈結串列資料結構
12-4 使用區域變數指向串列的開頭
12-5 在串列的結尾新增節點
12-6 搜尋鏈接串列的內容
12-7 刪除節點
| APCS 觀念題練習
| APCS 實作題 定時 K 彈(約瑟夫問題)
第 13 章 樹狀結構
13-1 樹狀結構
| APCS 實作題 樹狀圖分析
13-2 二元樹與平衡二元樹
13-3 使用鏈接串列建立二元樹
13-4 走訪與搜尋二元樹的節點資料
13-5 新增二元樹的節點
13-6 刪除節點
| APCS 觀念題練習
| APCS 實作題 自動分裝(旅行團團員分配)
第 14 章 圖形、佇列、最長距離與最短路徑
14-1 圖形結構
14-2 深度優先(DFS)與廣度優先(BFS)走訪
14-3 佇列(queue)與廣度優先(BFS)走訪
14-4 用陣列實作佇列
14-5 廣度優先走訪(BFS)程式實作
| APCS 實作題 最長路徑(血緣關係)
14-6 計算最短路徑:Dijkstra(戴克斯特拉)演算法
| APCS 實作題 機器人移動路徑
第 15 章 動態規劃
15-1 計算費式數列
15-2 背包問題
15-3 找零所需的最少硬幣數量
15-4 最長共同子序列
| APCS 實作題 置物櫃(板凳)出租
| APCS 實作題 勇者修練
第 16 章 回溯法與雜湊表
16-1 走出迷宮
16-2 N 皇后問題
| APCS 實作題 美麗彩帶(完美序列)
16-3 可壓縮儲存空間的「雜湊表(Hash Table)」
16-4 具備碰撞處理機制的雜湊函式
| APCS 實作題 完美序列(雜湊版)
附錄 A 程式開發工具、GCC 以及 Makefile 編譯命令檔
A-1 安裝 Code::Blocks 程式開發工具
A-2 手動編譯 C 程式
A-3 其他 gcc 命令選項以及 gdb 除錯工具
A-4 封裝函式庫以及靜態連結函式庫
A-5 採用 makefile 檔編譯程式
A-6 在 Mac 電腦上安裝與設置 C 程式開發工具
附錄 B 讀寫檔案
B-1 文字檔和二進位檔
B-2 操作檔案的函式
B-3 讀取文字檔
B-4 寫入文字檔
B-5 採用 "w+" 讀寫與 "r+" 寫讀模式開啟檔案
B-6 在文字檔案中新增文字
B-7 以二進位形式讀寫檔案
B-8 處理多國語系字串:wchar_t 型態以及語言環境設定
附錄 C C++
C-1 處理標準輸出∕輸入資料流以及命名空間
C-2 物件導向程式設計(OOP)與 string 字串物件
C-3 函式簽名、多載以及預設參數值
C-4 標準樣板程式庫(STL)
立即查看