您的位置:首页 > 其它

堆顶元素的获取与删除

2016-03-19 08:44 295 查看
#include<iostream>
using namespace std;
class Heap {
private:
int *data, size;
public:
Heap(int length_input) {
data = new int[length_input];
size = 0;
}
~Heap() {
delete[] data;
}
void push(int value) {
data[size] = value;
int current = size;
int father = (current - 1) / 2;
while (data[current] > data[father]) {
swap(data[current], data[father]);
current = father;
father = (current - 1) / 2;
}
size++;
}
void output() {
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
}
int top()
{
return data[0];
}
void update(int pos,int n)
{
int lchild=2*pos+1,rchild=2*pos+2;
int max_value=pos;
if( lchild<n && data[lchild]>data[max_value] )
{
max_value=lchild;
}
if(rchild<n&&data[rchild]>data[max_value])
{
max_value=rchild;
}
if(max_value!=pos)
{
swap(data[pos],data[max_value]);
update(max_value,n);
}
}
void pop()
{
swap(data[0],data[size-1]);
size--;
update(0,size);
}
};
int main() {
int arr[10] = { 12, 9, 30, 24, 30, 4, 55, 64, 22, 37 };
Heap heap(100);
for (int i = 0; i < 10; i++) {
heap.push(arr[i]);
}

heap.output();
cout<<heap.top()<<endl;
heap.pop();
heap.output();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: