//C++动态数组简单的模拟二元堆
#include<iostream> using namespace std; class BinaryHeap
{
private:
int cap; //该阵列的最大容量
int size; //当前元素个数
int* datas; //数组首地址
public:
explicit BinaryHeap(int cap_) :cap(cap_), size(0)
{
datas = new int[cap];
}
~BinaryHeap(){ delete datas; }
void Insert(int);
int DeleteMin();
}; //用数组表示的树,当下标从0開始时,i为当前节点,i*2+1为i的左子树节点,i*2+2为i的右子树节点,i/2为i的父节点 void BinaryHeap::Insert(int data)
{
int i;
for (i = size; i / 2 >= 0 && datas[i / 2] > data; i /= 2) //上滤
{
datas[i] = datas[i / 2];
}
datas[i] = data;
size++;
} int BinaryHeap::DeleteMin()
{
int i = 0, child = 0;
int lastdata = datas[--size];
int mindata = datas[0];
for (i = 0; i * 2 + 1 <= size-1; i = child) //下滤
{
child = i * 2 + 1;
if (child < size-1 && datas[child + 1] < datas[child])
{
child++;
}
if (lastdata > datas[child])
{
datas[i] = datas[child];
}
else
{
break;
}
}
datas[i] = lastdata;
return mindata;
} int main()
{
BinaryHeap t(400); for (int i = 0; i < 100; i++)
t.Insert(i);
for (int i = 200; i > 100; i--)
t.Insert(i); for (int i = 0; i < 200; i++)
cout << t.DeleteMin() << endl; cin.get();
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

C++动态数组简单的模拟二元堆的更多相关文章

  1. 用c的数组简单的模拟了入栈

    其实很简单,只要控制住输出时倒输出.且只输出一个 #include <stdio.h>#include <stdlib.h>int zhan[20];int n=-1;void ...

  2. 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)

    目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...

  3. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  4. vc++基础班[28]---动态数组及动态链表的讲解

    C++中也有相应的动态数组.动态链表.映射表的模板类,就是STL中的:vector.list.map 他们属于C++标准中的一部分,对于程序的移植性来说也是不错的,但是在MFC编程中使用 CArray ...

  5. [UE4]C 语言动态数组

    在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定.对于这种问题,用静态数组的办法很难解决.为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数结合指 ...

  6. C基础 万能动态数组

    引言 - 动态数组切入 开发中动态类型无外乎list 或者 vector, 这里就是在C中实现vector结构容器部分. 对于C中使用的数据结构, 可以参照下面感觉很不错框架源码学习 , 感觉是< ...

  7. 容器(vector)、数组、new创建的动态数组,你到底用哪一个(执行效率分析)

    1.问题的提出 在没有了解vector之前,动态数组一般都是又new创建的.在了解vector后发现vector竟是那样方便好用,但方便的同时却是以牺牲执行效率为代价的.网上对vector和array ...

  8. C/C++ new/delete []、内存泄漏、动态数组

    一.概念 new/delete是用于动态分配和撤销内存的运算符.new/delete是c++里才有的,c中是用malloc和free,c++虽然也可以用,但是不建议用.当我们使用关键字new在堆上动态 ...

  9. C++学习之动态数组类的封装

    动态数组(Dynamic Array)是指动态分配的.可以根据需求动态增长占用内存的数组.为了实现一个动态数组类的封装,我们需要考虑几个问题:new/delete的使用.内存分配策略.类的四大函数(构 ...

随机推荐

  1. amazeui学习笔记--css(常用组件3)--按钮组Button-group

    amazeui学习笔记--css(常用组件3)--按钮组Button-group 一.总结 1.按钮组用法:把一系列要使用的 .am-btn 按钮放入 .am-btn-group . 2.按钮工具栏: ...

  2. GCJ 2008 Round 1A Minimum Scalar Product

    https://code.google.com/codejam/contest/32016/dashboard 题目大意: GCJ(google code jam)上的水题.下周二有比赛,来熟悉熟悉. ...

  3. (转)xshell无法在vim中复制黏贴

    ssh xshell 连接在vim中无法用 ctrl+insert 复制黏贴 修改.vimrc set mouse=c vi的三种模式:命令模式,插入模式,可视模式.鼠标可以启动于各种模式中: The ...

  4. SorceTree 与 Bitbucket连接

    选择bitbucket,由于bitbucket免费的帐号最多能够8个人一起协同开发.我们项目组人数少于8个,私有仓库也不限制. 经过半个多月的应用,大家感觉也还不错,对个人而言.在家也能訪问代码,对公 ...

  5. error app/styles/components/iconfont.scss (Line 12: Invalid GBK character "\xE5")

    因为要用到iconfont,引入iconfont到sass文件后,出现编译sass文件错误,如下截图: 解决方法:在顶部设置编码格式 @charset "utf-8"; 编译成功!

  6. 工欲善其事必先利其器--------搭建Android平台

    工欲善其事必先利其器--------搭建Android平台 1.1            安装JDK 在Eclipse的开发过程中需要JDK或JRE的支持,否则会报错. (1)     下载JDK(建 ...

  7. 重新配置vim

    重新配置,并非折腾,发个链接吧留着以后用。 都是前辈 vimer程序员的世界 Vim(gvim)配色方案推荐 gvim(vim)使用微软雅黑中文字体 Vim(gvim)编程字体推荐 所需即所获:像 I ...

  8. 【BZOJ 4518】[Sdoi2016]征途

    [链接] 链接 [题意] 在这里输入题意 [题解] DP+斜率优化; \(D(x) = E(x^2)-E(x)^2\) 其中\(E(x)^2\)这一部分是确定的. 因为总长是确定的,分成的段数又是确定 ...

  9. [Javascript Natural] Break up language strings into parts using Natural

    A part of Natural Language Processing (NLP) is processing text by “tokenizing” language strings. Thi ...

  10. "网络适配器本地连接没有有效ip地址配置"错误的解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 win server2008通过一台win xp的共享网络来上网,采用ipv4,网址设置如下: win xp是可以上网 ...