遊戲尋路演算法入門:回溯法遞歸實作與全路徑枚舉
問題定義 在二維網格地圖中,從起點 (1,0) 找到終點 (值為 2)。地圖編碼:`1`=可通行路徑,`0`=牆壁/障礙,`2`=目標點。 地圖與狀態資料結構
雜湊二元樹:結合雜湊表與二元樹的高效查找混合結構
背景:平衡二元樹的查找瓶頸 AVL、紅黑樹等平衡二元樹雖保證 O(log N) 查找,但頻繁插入/刪除導致旋轉調整,實際效能波動大。極端情況下(如單邊鏈狀退化)
二元樹廣度優先遍歷(層序遍歷)實作:佇列輔助的非遞歸演算法
為何需要佇列? 前序/中序/後序遍歷皆為深度優先(DFS),天然適合遞歸。廣度優先(BFS)/ 層序遍歷需「逐層處理」:先處理完第 1 層,再處理第 2 層..
二元搜尋樹序列化儲存與載入:陣列索引映射法實作指南
問題:指標難以直接序列化 二元樹節點含多指標(左、右、父),直接寫入硬碟無意義(記憶體位址下次載入失效)。需將樹結構轉為無指標的純資料結構儲存。 解決方案:堆
二元搜尋樹線索化實作:雙向鏈表優化遍歷與刪除效能
動機:為何需要線索化? 標準二元搜尋樹(BST)僅有左右子節點指標。若需刪除一段範圍資料或中序遍歷輸出,必須反覆從根節點搜尋或遞歸回溯,效率低下。解決方案:在節
演算法實作筆記:從零手寫 Hash Table(雜湊表)
前言:為什麼需要 Hash Table? 在資料結構的譜系中,鏈結串列 插入刪除 O(1) 但查找 O(n);二元搜尋樹 查找 O(log n) 卻需額外指標維
C語言核心筆記:運算符與表達式深度解析(上)
前言 運算符與表達式是 C 語言程式設計的基石。熟練掌握它們的分類、優先順序與類型轉換規則,能讓你寫出更高效、更安全的程式碼。本文系統整理了 C 語言的運算符體
DOS 時代的經典:VGA 256 色模式下 BMP 位圖顯示完整源碼解析
歷史背景與技術棧 16 位實模式 DOS(Turbo C / Borland C++),直接操作硬體: 視頻內存映射:0xA000:0000 (VGA 模
高性能網絡編程:DataBuffer 與 BufferPool 零拷貝緩衝區實現全解析
設計目標 高併發網絡服務中,頻繁 malloc/free 或 new/delete 緩衝區會導致: 堆鎖爭用、碎片化、GC 壓力(托管語言) 緩衝區大
C 語言基礎筆記:資料類型、常數與變數完整指南
一、常見資料類型總覽 C 語言類型系統分為基本類型、建構類型、指標類型、空類型四大類: 基本類型:`int`、`short`、`long`、`unsigned
C 語言入門筆記(一):第一個程序、基本語法與編譯流程
你好,C 語言 從 Java 轉向 C,最大的心態轉變:**手動管理記憶體、無垃圾回收、編譯鏈接分離、標準庫極簡**。本文記錄入門第一步:最小程序、編譯運行、核
MFC 對話方塊顯示後延遲執行程式碼的兩種實作技巧
問題背景 在 MFC 專案中,`OnInitDialog()` 負責對話方塊初始化。若初始化邏輯龐大(如載入大量資料、網路請求、複雜計算),會導致對話方塊長時間
C++ 類大小完全指南:空類、虛函數、單/多繼承、虛繼承的記憶體佈局實測
前言:sizeof 不會撒謊 C++ 類的大小由**非靜態數據成員**、**虛指針 (vptr)**、**虛基類指針 (vbptr)**、**對齊填充**共同決
Hello World 背後的故事(二):從 CreateProcess 到 mainCRTStartup 的進程誕生之旅
承接上文:進程有了,代碼還沒跑 上篇確立了連接器將 mainCRTStartup 寫入 PE 入口點。但操作系統如何將這個地址變為執行中的指令指針(RIP/EI
Hello World 背後的故事(一):編譯器選項、CRT 與入口點的真相
引言:最熟悉的陌生人 printf(Hello World\n); —— 這行代碼帶領無數程序員入門。但從源碼到可執行文件,再到進程啟動、CRT 初始化、最終進
C99 柔性數組成員(不完整數組)詳解:替代零長度數組的標準寫法
背景:結構體尾部的變長數據需求 經典場景:網絡封包、文件格式、共享記憶體中,結構體頭部固定,尾部跟隨**可變長度**的數據區。C89 無標準寫法,常見非標準做法
C# ref 與 out 關鍵字深度解析:從適用場景到 IL 本質,徹底告別困惑
核心結論先行 ref:「我想在函數內**修改**呼叫端的變量(讀寫)」—— 傳遞**變量引用**(棧指標)。 out:「我想從函數**輸出**一個額外結果(單
Qt 主視窗關閉事件攔截:正確處理阻塞任務與 Esc 鍵退出
場景痛點 GUI 應用中,若用戶點擊關閉按鈕或按 Esc 時,存在**耗時阻塞任務**(網路連線、資料庫事務、執行緒等待)正在運行,直接退出會導致資源洩漏、數據