10.6 堆模板的复习

我已经很久没有打代码了,已经把堆给忘掉了,今天又把堆给捡起来

堆的要求

给定一个数列,初始为空,请支持下面三种操作:

  1. 给定一个整数 xx,请将 xx 加入到数列中。
  2. 输出数列中最小的数。
  3. 删除数列中最小的数(如果有多个数最小,只删除 11 个)

1要求的话在堆中加入东西就是二叉树大小++,然后在末尾加入东西,东西一直与它的father比较(father 位置vi/2),直到去到一个合适的位置,然后停止

2要求就是把二叉树的首位输出

3要求就是把二叉树的最后一位替换掉第一位,二叉树大小--,然后做松弛处理,一直与它的儿子比(与vi*2和vi*2+1比)谁更小就谁上,然后成为儿子

以下是我在2017年11月打的代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
const int maxx=1000000;
using namespace std;
int tree[maxx],n,s;
void push(int k)
{
	tree[++s]=k;
	for(int i=s,j=i/2;i>=1;i=j,j=i/2)
	{
		if(tree[i]<tree[j])
		{
			swap(tree[i],tree[j]);
		}
		else
		break;
	}
}
void pop()
{
	tree[1]=tree[s--];
	for(int i=1,j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值