请你实现一个堆(大根堆)。 操作: push x:将加入堆。保证为int型整数。不输出任何内容。 top:输出堆顶元素。若堆为空,输出"empty"(不含引号)。 pop:输出堆顶元素,且弹出堆顶。若堆为空,输出"empty"(不含引号)。
区块链毕设网qklbishe.com为您提供问题的解答
请你实现一个堆(大根堆)。
操作:
push x:将加入堆。保证为int型整数。不输出任何内容。
top:输出堆顶元素。若堆为空,输出"empty"(不含引号)。
pop:输出堆顶元素,且弹出堆顶。若堆为空,输出"empty"(不含引号)。
#include<string>
using namespace std;
template<typename T>
class heap{
public:
heap(int n):array(new T[n]),length(0){}
void push(int x){
array[length++]=x;
for(int i=length/2-1;i>=0;i=(i-1)/2){
adjustHeap(i);
if(i==0)
break;
}
}
void pop(){
if(length<=0){
cout<<"empty"<<endl;
}else{
cout<<array[0]<<endl;
array[0]=array[length-1];
length–;
adjustHeap(0);
}
}
void top(){
if(length<=0){
cout<<"empty"<<endl;
}else{
cout<<array[0]<<endl;
}
}
void adjustHeap(int i){
int temp=array[i];
for(int k=2*i+1;k<length;k=2*k+1){
if(k+1<length && array[k+1]>array[k])
k++;
if(array[k]>temp){
array[i]=array[k];
i=k;
}else {
break;
}
}
array[i]=temp;
}
private:
T* array;
int length;
};
int main(){
int n(0);
cin>>n;
heap<int> h(n);
string str1;
while(n–){
cin>>str1;
int value(0);
if(str1[1]==’u’){
cin>>value;
h.push(value);
}else if(str1[0]==’p’){
h.pop();
}else if(str1[0]==’t’)
h.top();
}
return 0;
以上就是关于问题请你实现一个堆(大根堆)。
操作:
push x:将加入堆。保证为int型整数。不输出任何内容。
top:输出堆顶元素。若堆为空,输出"empty"(不含引号)。
pop:输出堆顶元素,且弹出堆顶。若堆为空,输出"empty"(不含引号)。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训