為了簡單起見,存放資料的結構使用陣列。
組織序號
我們知道優先佇列,也叫大(小)頂堆(預設為二叉堆)。堆是一棵完全二叉樹
,但實際上我們使用陣列並通過組織序號便能夠表示它,這依賴於完全二叉樹的良好性質。
為防止以後出錯或造成混亂,實現前一定要先確定好如何組織序號:
建堆操作
以 i nd
ex=0
index=0
index=
0 起始建立小頂堆為例
// start 起始索引 end 末尾索引
// min_heapify 在更新根節點後維護整個堆的堆序性
void
min_heapify
(elementtype* elements,
int start,
int end)
}void
createheap
(elementtype* elements,
int elementssize)
/*(1)對應*/
2*dad +
1<= end
/*(2)對應*/
if(son+
1<= end && elements[son+1]
)
/*對應*/ i = elementssize/2-
1
刪除操作(deletemin
)
//確保呼叫時 堆 非空
elementtype deletemin
(elementtype* elements,
int elementssize)
elements[i]
= lastone;
return min;
}
for
elements[i]
= lastone;
C語言實現排雷遊戲(多檔案)
遊戲功能 列印雷盤 隨機布雷 第一踩雷不死 重新布雷 擴充套件式掃雷 計算周圍雷的個數 關鍵點 玩遊戲的雷盤比實際定義的陣列小。memset初始化陣列 以位元組為單位初始化 rand函式給雷盤隨機位置布雷 用sand設定隨機數種子 第一步就踩到雷要這個雷移開,給玩家一次機會。踩到雷後根據情況決定是否...
C 使用優先佇列實現dijkstra
c 優先佇列的dijkstra解法 我使用二維陣列來儲存結果,找到了所有點之間的最短路徑 初始圖 ab cda0 4101b 2011 c8140 14d159 100結果 ab cda0 451b 2011 c8120 9d119 100標記陣列 用來尋找最終的路徑ab cdaa abab bbb...
C語言佇列實現
以下解釋片面,但便於初學者理解 1.佇列是先進先出的資料結構 2.佇列結構體只有頭和尾兩個指標,並不包含儲存的資料。它只負責記錄佇列的頭尾指向,方便理解佇列的實現。3.佇列成員結構體包含乙個用來儲存資料的變數,和乙個指向下個成員的指標,指標指向下乙個佇列成員。4.入隊要更改佇列結構體隊尾指標到下乙個...