//优先队列的插入与删除操作

来源:互联网 发布:免费手机视频制作软件 编辑:程序博客网 时间:2024/06/11 19:33
//优先队列的插入与删除操作
#include<iostream>
using namespace std;


const int maxsize=100;
int a[maxsize];


void siftup(int v,int n)
{
if(n>=maxsize)
{
cout<<"error"<<endl;
return;
}
a[++n]=v;
for(int i=n;(i>1)&&(a[i/2]>a[i]);i/=2)
swap(a[i/2],a[i]);
}


int siftdown(int n)
{
if(n<1)
{
cout<<"error data"<<endl;
return 0;
}
int t=a[1];
a[1]=18;
int i,c;
for(i=1;(c=2*i)<=n;i=c)
{
if(c+1<=n&&a[c+1]<a[c])
c++;//这里判断具体是哪个数大点
if(a[i]<a[c])
break;
swap(a[i],a[c]);
}
return t;
}


int main(void)
{
int n;
cin>>n;
int val;


//输入一个具有堆性质的数组
for(int i=1;i<=n;i++)
{
cin>>val;
a[i]=val;
}
//for(int i=0;i<maxsize;i++)
// cout<<a[i]<<endl;




//*****插入一个元素
cin>>val;
siftup(val,n);//这里插入元素
for(int i=0;i<maxsize;i++)
cout<<a[i]<<"  ";
cout<<endl;


int shanchu=siftdown(n);//删除一个堆性质数组的最小元素后还呈堆性质
cout<<"delete the element"<<shanchu<<endl;
for(int i=0;i<maxsize;i++)
cout<<a[i]<<"  ";
cout<<endl;
return 0;
}
0 0