堆的实现

原创 2018年04月17日 21:12:38
#include <iostream>
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX 10000
using namespace std; 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int heap[MAX],sz=0;
void push(int x)
{
	int i=sz++;
	while(i>0)
	{
		int 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;
}
int main(void)
{
	srand(unsigned(time(NULL)));
	for(int i=0;i<10;i++)
	{
		int a=rand()%10;
		push(a);
		cout<<a<<" ";
	}
	cout<<endl;
	for(int i=0;i<10;i++)
	{
		int b=pop();
		cout<<b<<" ";
	}
	cout<<endl;
	return 0;
} 

堆的C++实现

堆 性质: 1.堆是一颗完全二叉树,用数组实现。    2.堆中存储数据的数据是局部有序的。 最大堆:1.任意一个结点存储的值都大于或等于其任意一个子结点中存储的值。      2.根结点存储着该...
  • Alfa_
  • Alfa_
  • 2016-12-22 21:00:38
  • 1219

【JAVA】堆实现

二叉堆的JAVA实现
  • Coding_Fox
  • Coding_Fox
  • 2016-05-07 13:17:47
  • 3341

数据结构之堆(Heap)的实现

堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构,所以堆也叫做二叉堆。二叉堆满足二个特性:  1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。  2.每个结点的左子树和右子树...
  • leex_brave
  • leex_brave
  • 2016-05-24 15:28:10
  • 4184

C++实现一个堆(模板)

C++ 实现一个堆
  • zhangxiao93
  • zhangxiao93
  • 2017-05-18 11:41:00
  • 754

(第17讲)堆的数组实现

堆: 1、实际是一种完全二叉树,只有最后一层会不满,所以用数组实现,数组都会填满,不会有空缺 2、堆的左右子节点都不大于父节点,即父节点大于或者等于其子节点 程序如下: /**  * 堆:基...
  • weiyastory
  • weiyastory
  • 2016-07-31 20:41:20
  • 610

数据结构C语言实现系列[6]——堆

#include stdio.h>#include stdlib.h>typedef int elemType;/*******************************************...
  • DL88250
  • DL88250
  • 2007-01-29 01:24:00
  • 2141

二之三续、Dijkstra 算法+Heap堆的完整c实现源码

原作者地址:http://blog.csdn.net/v_JULY_v/article/details/6274836   二之三续、Dijkstra 算法+Heap堆的完整c实现源码 作者...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2015-08-26 09:53:27
  • 758

C++ 堆结构(数组实现)

要说最大堆和最小堆,就得先知道最大树和最小树。 每个结点的值都大于(小于)或等于其子节点(如果有的话)值的树,就叫最大(最小)树。 最大堆(最小堆)是最大(最小)完全树。 由于堆是完全二叉树,所...
  • xiaojun111111
  • xiaojun111111
  • 2016-07-25 14:10:49
  • 678

堆这种数据结构 Java实现

关于我所遇见的各种堆的含义,可以在下面这两篇博文中看到: Java虚拟机 堆和栈 深入理解计算机系统 1.7 操作系统管理硬件 本文讲的是堆数据结构的实现,并给出Java代码。 堆是一颗完...
  • l294265421
  • l294265421
  • 2016-03-18 23:40:37
  • 5110

使用两个栈实现堆

扩展:用两个队列实现一个栈? 思路: 1.有两个队列q1和q2,先往q1内插入a,b,c,这做的都是栈的push操作。 2.现在要做pop操作,即要得到c,这时可以将q1中的a,b两个元素...
  • luojian5900339
  • luojian5900339
  • 2015-07-10 17:56:02
  • 586
收藏助手
不良信息举报
您举报文章:堆的实现
举报原因:
原因补充:

(最多只允许输入30个字)