本文介紹《數據結構》(嚴蔚敏、吳偉民版) 第 8 章「動態存儲管理」中「存儲緊縮」算法的 C 語言完整實現,包含頭檔、核心源碼、測試主程式與運行結果展示。
StorageCompacting/ ├── StorageCompacting.h // 數據結構定義 ├── StorageCompacting.c // 核心算法實現 └── StorageCompacting-main.c // 測試驅動程式

定義塊描述符、堆管理結構、操作介面:
Block:{ addr, size, tag } (tag=0 空閒, 1 佔用)Heap:{ base, size, blocks[], count }InitHeap、Alloc、Free、Compact、PrintHeap
關鍵函數邏輯:
// 緊縮核心:將所有佔用塊向低地址移動
void Compact(Heap *h) {
int free_pos = 0; // 下一個空閒位置
for (int i = 0; i < h->count; i++) {
if (h->blocks[i].tag == OCCUPIED) {
if (i != free_pos) {
// 移動數據內容 (memmove 處理重疊)
memmove(h->base + free_pos * UNIT_SIZE,
h->base + h->blocks[i].addr * UNIT_SIZE,
h->blocks[i].size * UNIT_SIZE);
h->blocks[i].addr = free_pos;
}
free_pos += h->blocks[i].size;
}
}
// 合併尾部空閒塊
// 更新 blocks 陣列...
}

測試場景:初始化堆 → 多次分配/釋放 → 觸發緊縮 → 驗證空間合併

輸出展示:分配前後堆狀態、緊縮前後空閒塊合併效果、地址連續性驗證。
Status.h文檔目錄:數據結構\▲課本算法實現\▲08 動態存儲管理\04 StorageCompacting
memmove 處理記憶體重疊移動的關鍵作用更多章節持續更新中...
