堆的簡單實現

2021-08-10 15:44:49 字數 1854 閱讀 1233

堆資料結構是一種陣列物件,可被視為一顆完全二叉樹

堆結構的二叉樹儲存

最大堆:父》子

最小堆:父《子

如下圖,先建立乙個大堆

下面用**模擬實現乙個大堆(插入 ,頭刪)

#include 

#include

#include

using

namespace

std;

template

class heap

heap(const t* a, size_t n)

int parent = (n - 1) / 2;

for (parent; parent>=0; parent--)

}void show()

printf("\n");}}

void push(const t& x)

void pop()

protected:

vector

_a;void adjustdown(int parent)//向下調整

else}}

void adjustup(int child)//向上調整

else

break;}}

};void main()

; for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)

printf("\n");

heaphp(a, sizeof(a) / sizeof(a[0]));

hp.show();

hp.push(23); printf("hp.push(23)\n");

hp.show();

hp.pop(); printf("hp.pop();\n");

hp.show();

system("pause");

}

結果如下

如上就是堆的簡單實現,再進一步可以將建大小堆關鍵判斷語句用仿函式代替

#pragma once

#include

#include

#include

using

namespace

std;

template

struct greater//建大堆

};template

struct less//建小堆

};template

class heap

heap(const t* a, size_t n)

int parent = (n - 1) / 2;

for (parent; parent >= 0; parent--)

}void show()

printf("\n");}}

void push(const t& x)//尾插

void pop()//刪除堆頂元素

size_t size()

const t& top()

protected:

vector

_a;void adjustdown(int parent)//向下調整

else}}

void adjustup(int child)//向上調整

else

break;}}

};

如上所示為用仿函式替換的堆,根據需要建大堆或小堆

c 對堆的簡單實現

include using namespace std typedef class poinner on class poinner on create int maxsize bool isempty on head bool isfull on head void insert on head,...

堆的簡單實現和應用

一 用陣列儲存的堆和由此堆上實現的簡單排序。雖然對排序保證了最壞情況下的o n log n 的效能,但對於常見輸入,最快的堆排序也比簡單快速排序慢。1 include2 using namespace std 3int x 100 4 void siftup intn 5 17 18void sif...

C語言之堆的簡單操作實現

一 堆的概念 1 定義 如果有乙個關鍵碼的集合k 把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足 ki k2i 1 且 ki k2i 2 ki k2i 1 且 ki k2i 2 i 0,1,2 則稱為小堆 或大堆 將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小...