c 最大堆的實現

2021-08-26 09:26:54 字數 1526 閱讀 9680

在看一些開源元件的原始碼時,會發現很多的底層地方都會使用到最大堆(最小堆)的資料結構,如 在libevent中維護超時事件就用到了最小堆的結構,可見,這種資料結構的重要性。

最大堆:根結點的鍵值是所有堆結點鍵值中最大者。

最小堆:根結點的鍵值是所有堆結點鍵值中最小者。

堆,最重要的乙個過程就是重建的過程,當有新的資料加進來或者移除時,都會對堆進行一次重建,最大堆也是如此

1.當彈出堆頂元素時,會將末尾元素放到堆頂,依次向下與 下層子節點比較,若比子節點小,則交換,繼續向下比較,直到調整好順序。

2. 當有新元素新增時,先將元素放到末尾,依次向上與父節點比較,若比父節點大,則交換,繼續向上比較,直到調整好順序

/*************

@author xl

@date 2018/08/28

**/#ifndef _maxheap_h

#define _maxheap_h

#include #include using namespace std;

// *最大堆的實現,二叉樹用陣列來表示

templateclass maxheap

;templatemaxheap::maxheap(const t* arr,const int& size)

for(int i=m_size/2-1; i>=0; i--) }

templatemaxheap::~maxheap()

//push元素到堆底,並向上重建堆

templatevoid maxheap::push(const t& val)

else

printf("capacity is full.\n");

}//彈出堆頂元素,並向下重建堆

templateint maxheap::pop()

else

printf("size is empty.\n");

}templatevoid maxheap::sift_down( int index)

else

}heap[(index-1)/2] = temp; //將原值(小值)賦給處理結束的地方,完成down操作 }}

templatevoid maxheap::sift_up( int index)

heap[index] = temp; //將大值賦給父節點,完成up操作 }}

templatevoid maxheap::input()

; maxheapmax_heap(array,10);

max_heap.input();

max_heap.push(80);

max_heap.input();

max_heap.pop();

max_heap.input();

return 0;

}

結果如下:

C 最大堆實現

max heap.h pragma once include template class max heap node heap 最大堆 uint32 t max size 最大儲存數 uint32 t size 儲存數 擴容 void expansion 刪除指定下標節點 void del nod...

c 最大堆的演算法實現

堆的資料結構是一種陣列,也可以說堆是一種有個性的陣列,他可以被視為一顆完全二叉樹 也有可能是滿二叉樹 任一節點的值均大於等於他左右孩子節點的值,其中堆頂的值最大 根節點 左孩子節點 2 父節點 1 右孩子節點 2 父節點 2 父節點 孩子節點 1 2 堆的應用場景 從很多個數中找出最大的前k個數 最...

最小堆 最大堆的實現 c

最小堆 templateclass minheap int size const t min minheap insert const t x minheap deletemin t x void initialize t a,int size,int arraysize void deactiva...