一,堆
int heap[maxn],sz=0;
void push(int x)
{
int i,p;
i=sz++;
while(i>0){
p=(i-1)/2;
if(heap[p]<=x){
break;
}
heap[i]=heap[p];
i=p;
}
heap[i]=x;
}
int pop()
{
int ret=heap[0];
int x=heap[--sz];
int i=0;
while(i*2+1<sz){
int a=i*2+1,b=i*2+2;
if(b<sz&&heap[b]<heap[a]) a=b;
if(heap[a]>=x) break;
heap[i]=heap[a];
i=a;
}
heap[i]=x;
return ret;
}
二,优先队列
#include <queue>
#include <iostream>
using namespace std;
int main(){
priority_queue<int> pque;
pque.push(3);
pque.push(5);
pque.push(1);
while(!pque.empty()) {
cout<<pque.top()<<endl;
pque.pop();
}
return 0;
}
三,二叉搜索树的实现
node *root=NULL;
root=insert(root,1);
struct node{
int val;
node *lch,*rch;
};
node* insert(node *p,int x){
if(p==NULL){
node* q=new node;
q->val=x;
q->lch=NULL;
q->rch=NULL;
return q;
}
else{
if(x<p->val) p->lch=insert(p->lch,x);
else p->rch=insert(p->rch,x);
return p;
}
}