霍夫曼樹構建完整實作:通用排序與編碼輸出
霍夫曼樹回顧 霍夫曼樹是帶權路徑長度最小的二叉樹,廣泛用於無損壓縮編碼。構建步驟: 建立葉節點集合,每節點含權重(頻率)。 重複:取權重最小的兩棵樹合併為新樹
突破基本型別極限:C/C++ 處理超長整數與高精度浮點數完全指南
為什麼基本型別不夠用? C/C++ 內建型別受限於位寬: float:32 位,約 7 位有效數字,範圍 ~10±38 double:64 位,約 15-16
IOCCC 國際混亂 C 代碼大賽:那些令人嘆為觀止的獲獎作品
什麼是 IOCCC? IOCCC (International Obfuscated C Code Contest) 是全球最著名的「寫出最難閱讀、最扭曲 C
Prim 演算法完整實作(中):最小生成樹建構與邊選擇核心邏輯
前言 本文為 Prim 演算法系列第二篇,聚焦於「最小生成樹建構主流程」與「邊選擇核心函數」的實作細節,展示自頂向下的模組化設計思路。 主流程:get_min
Prim 演算法完整實作(下):關鍵輔助函數與優化總結
前言 承接前兩篇,本文完成 Prim 演算法的最後拼圖:無效邊清理、邊合法性判斷、鏈表排序三大核心輔助函數,並給出演算法工程化的四點心得。 核心輔助函數詳解
克魯斯卡爾演算法詳解:尋找最小生成樹的經典方法
前言 克魯斯卡爾演算法是解決最小生成樹問題的兩大經典演算法之一(另一個是 Prim 演算法)。不同於 Prim 演算法以節點為中心擴展,克魯斯卡爾演算法採用「邊
克魯斯卡爾演算法 C 語言實現詳解(中):排序、查找與合併三大核心模組
承接上篇圖結構定義,本文深入剖析克魯斯卡爾演算法三大核心難點:邊權排序、環路檢測(查找)、樹合併,提供通用排序框架與具體實現代碼。 一、通用冒泡排序框架(函數
SQLite3 C API 動態構建 SQL 插入語句:官方推薦 mprintf 用法
在 C 語言中向 SQLite3 動態插入資料,手動拼接 SQL 字串極易導致注入風險與格式錯誤。SQLite 官方提供 sqlite3_mprintf() 格
C++ 句柄類模式:利用不完整類型減少編譯依賴與重新編譯
「易碎基類問題」:頭文件變更會觸發所有包含它的源文件重新編譯。對於大型專案,編譯時間極其可觀。句柄類模式配合「不完整類型聲明」可大幅削弱此耦合。 問題場景 類
Linux 孤兒進程與殭屍進程深度解析(一):孤兒進程實戰演示
在 Linux/Unix 系統中,進程關係鏈的動態變化造就了「孤兒進程」與「殭屍進程」兩種特殊狀態。本文先講孤兒進程:父進程先於子進程終止,子進程被 init
Linux 孤兒進程與殭屍進程深度解析(二):殭屍進程實戰演示
承接上篇孤兒進程概念,本文聚焦殭屍進程:子進程結束而父進程未 wait/waitpid 回收,導致進程描述符滯留於系統進程表中,狀態顯示為 <defunc
C++ 判斷浮點數是否為整數值的正確姿勢
判斷 double/float 變數是否代表整數值(如 4.0、-3.0),不能直接用 n == (int)n 或 n - (int)n == 0,因浮點數表示
逆序數求解完全指南:歸併排序法與樹狀數組法詳解
逆序數是衡量序列「無序程度」的核心指標。定義:對序列 S[i],統計每個元素前方比它大的元素個數,總和即為逆序數。例:4 3 1 2 的逆序數 = 0+1+2+
C++ 聚合初始化陷阱:類擁有構造函數時無法使用大括號初始化
C++ 中聚合類型(聚合初始化)與類的初始化規則差異巨大。本文通過對比數組、結構體、類的初始化行為,揭示「存在構造函數即喪失聚合特性」的核心規則。 聚合初始化