求问关于数据结构
  • 板块灌水区
  • 楼主miaojintao
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/10/4 21:41
  • 上次更新2023/11/4 04:49:43
查看原帖
求问关于数据结构
408859
miaojintao楼主2021/10/4 21:41

1.C++ STL库里的stack和手写栈有什么区别,为什么stack容易MLE?

2.用最大堆实现最大优先队列,与STL里的优先队列有什么区别?

救救孩子吧……

#include<iostream>
#include<algorithm>
#include<climits>
using namespace std;

void max_heapify(int a[],int i,int n){
	int l,r,largest;
	l=2*i;
	r=2*i+1;
	if(l<=n && a[l]>a[i]) largest=l;
	else largest=i;
	if(r<=n && a[r]>a[largest]) largest=r;
	if(largest!=i){
		swap(a[i],a[largest]);
		max_heapify(a,largest,n);
	}
}

void build_max_heap(int a[],int n){
	for(int i=n/2;i>=1;i--){
		max_heapify(a,i,n);
	}
}

void heapsort(int a[],int n){
	build_max_heap(a,n);
	for(int i=n;i>=2;i--){
		swap(a[1],a[i]);
		n--;
		max_heapify(a,1,n);
	}
}

int heap_maximum(int a[]){
	return a[1];
}

int heap_extract_max(int a[],int n){
	int max;
	if(n>=1){
		max=a[1];
		a[1]=a[n];
		n--;
		max_heapify(a,1,n);
		return max;
	}
	else return INT_MIN;
}

void heap_increase_key(int a[],int i,int key){
	if(key>=a[i]){
		a[i]=key;
		while(i>1 && a[i/2]<a[i]){
			swap(a[i],a[i/2]);
			i/=2;
		}
	}
}

void max_heap_insert(int a[],int key,int n){
	n++;
	a[n]=INT_MIN;
	heap_increase_key(a,n,key);
}

int main(){
	int n,i,j,a[1000],b,maxn;
	cin>>n;
	for(i=1;i<=n;i++){
		cin>>a[i];
	}
	build_max_heap(a,n);
	maxn=heap_maximum(a);
	max_heap_insert(a,54678,n);
	cout<<maxn<<endl;
	for(j=1;j<=n;j++){
		cout<<a[j]<<" ";
	}
	return 0;
}
2021/10/4 21:41
加载中...