資料結構 堆的應用

2021-09-10 17:05:51 字數 1147 閱讀 3189

public class heap 

/*** 插入操作的

*/public void insert(int value)

count++;

a[count] = value;

// 插入後,從節點開始從下往上開始堆化,插入 自下往上堆化

int i = count;

while (i / 2 > 0 && a[i] > a[i / 2])

}public int removemax()

// 最大值位於棧頂

int max = a[1];

// 然後繼續堆化,自上向下堆化,最後乙個元素和頂部元素交換後開始堆化

a[1] = a[count];

count--;

heapify(a, 1, count);

return max;

}/**

* 從 i開始到n,進行堆化

* @param a

* @param i

* @param n

*/public void heapify(int a, int i, int n)

if (i * 2 + 1 <= n && a[i * 2 + 1] > a[i])

if (maxpos == i) }}

}

堆的實現

2.堆排序

public class heaputils 

if (i * 2 + 1 <= n && a[i * 2 + 1] > a[i])

if (maxpos == i) }}

/*** 自底部開始向下堆化

* @param a

* @param n

*/public static void buildheap(int a, int n)

}public static void sort(int a, int n)

printdata(a);

}/**

*輸出資料

* @param a

*/private static void printdata(int a)

log.d("zpb","**********=");

}}

資料結構 堆及堆的應用

堆是一種特殊的樹形結構,堆的把每乙個節點都有乙個值,我們通常所說的堆這種資料結構,指的就是二叉堆。其實它可以被看做乙個完全二叉樹。它的每個節點的子樹又可以被看做是堆。堆可以分為最大堆和最小堆 最大堆 每個父節點都大於孩子節點 最小堆 每個父節點都小於孩子節點 a 我們在定義堆的資料成員的時候,利用s...

資料結構 堆及堆的應用

1.堆 把一組資料按照完全二叉樹的順序儲存模式儲存在乙個二維陣列中,若ai 若ai ai 1 ai ai 2,則稱為大堆 i 0,1,2.n 在堆中,若設父親節點為parent,則它的左孩子為2 parent 1,右孩子為2 parent 2 void makeheap datatype a,siz...

資料結構綜合應用 堆

動態維護中位數問題,可以用堆,樹狀陣列,線段樹等資料結構解決 堆,可以用來進行插入,查詢最值,刪除最值等操作 對頂堆 一大根堆和一小根堆,大根堆維護最小值,小根堆維護最大值。洛谷1168 題意 每輸入奇數個數字,實時輸出中位數 解題思路 定義乙個對頂堆,輸入第乙個數字,並作為中位數輸出,每輸入乙個數...