堆是一種特殊的二叉樹。它具有下面兩個性質:
1、每乙個節點的值大於或等於其每乙個子節點的值。
2、該樹全然平衡,最後一層的葉子都處於最左側的位置。
有最大堆和最小堆之分。以上定義是最大堆的定義,最小堆的定義例如以下:
1、每乙個節點的值小於或等於其每乙個子節點的值;
2、該樹全然平衡,最後一層的葉子都處於最左側的位置。
// heap_function.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include using namespace std;
void swap(int *p, int *q)
void moveup(int heap,int start)//向上移動的操作,用於向堆中插入元素用//
else
break; }}
void insert_ele(int heap, int value, int &count)//向堆中插入元素,count為堆中元素的個數。//
void movedown(int heap, int first, int last)
else
largest = last + 1; }}
void delete_ele(int heap, int &count)//從堆中刪除堆頂元素//
void floyalgorithm(int heap,int n)//從底到頂構建堆,n為元素個數//
}void williamsalgorithm(int heap, int n)//從頂究竟構建堆,由john williams提出//
}void heapsort(int heap, int n)//堆排序
}int _tmain(int argc, _tchar* ar**)
; //heapsort(data,9);
//floyalgorithm(data,9);
williamsalgorithm(data,9);
for (int i = 0; i < 9; ++i)
return 0;
}
堆以及堆的相關應用
本文中的堆是一種樹形資料結構,可以把堆看成一種特殊的完全二叉樹,再從二叉樹上加上一些限制條件即可以構成堆。即要求父節點元素全部都大於或等於子節點元素,或者小於等於。這就構成了倆種堆 堆的常見應用為 使用堆進行排序,也就是常說的堆排序,時間複雜度為nlgn 這是比較排序時間複雜度的下限,即使用比較的排...
堆相關問題
講堆不得不提的就是優先佇列。什麼是優先佇列?普通佇列 先進先出,後進後出 如何實現優先佇列?由上圖可知,用堆來實現優先佇列是乙個理想的方法。這裡採用二叉堆 最大堆 的定義 所有節點的值都不大於其父節點的值 二叉堆是乙個完全二叉樹 採用陣列來儲存二叉堆 由二叉堆的定義可以得出結論 對一顆完全二叉樹按層...
記憶體相關函式(堆)
每個程序有個預設堆,用於作業系統對程序呼叫win32函式時分配所需記憶體。這個堆系統自動管理,使用者無法干預 只能夠編譯時指定大小 getprocessheap 獲取預設堆控制代碼。堆的好處 部件保護 防止乙個型別的記憶體物件破壞其他型別的 更有效 相同結構使用乙個堆,分配和釋放時更有效 區域性訪問...