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

本文演示了如何实现优先队列的插入(siftup函数)和删除(siftdown函数)操作。通过C++代码展示了将元素插入具有堆性质的数组,并在删除最小元素后仍保持堆性质的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//优先队列的插入与删除操作
#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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值