cs11_c++_lab5待修改
heap.hh
#ifndef HEAP_HH
#define HEAP_HH #include <iostream>
#include <stdexcept>
#include <cassert> using namespace std; template <typename T, int maxsize>class heap//模板类heap,类型T,常量maxsize
{
private:
int num_values;//当前存储的元素的数量
T values[maxsize];//存储元素的数组 int parent(int index)
{
return (index - ) / ;
} int left_child(int index)
{
return * index + ;
} int right_child(int index)
{
return * index + ;
} void sift_down(int index)
{
assert(index < num_values);
int left = left_child(index);
int right = right_child(index); if(left >= num_values)
{
return;
}
if(right >= num_values)
{
if(values[left] < values[index])
{
swap_values(index, left);
}
}
else
{
T left_value = values[left];
T right_value = values[right];
int swap_child; if(left_value < values[index] || right_value < values[index])
{
if(left_value < right_value)
{
swap_child = left;
}
else
swap_child = right;
swap_values(index, swap_child);
sift_down(swap_child);
}
}
} void sift_up(int index)
{
int parent_index = parent(index);
if(index == )
{
return;
}
assert(parent_index >= );
assert(parent_index != index);
if(values[index] < values[parent_index])
{
swap_values(index, parent_index);
if(parent_index != )
{
sift_up(parent_index);
}
}
} void swap_values(int i, int j)
{
T tmp; assert(i >= && i < num_values);
assert(j >= && j < num_values);
assert(i != j); tmp = values[i];
values[i] = values[j];
values[j] = tmp;
} public:
heap<T, maxsize>():num_values(){cout<<"初始化啦"<<endl;}//初始化,在模板中的内容就无需再初始化了,只要初始化非模板内容就可以了。 T get_first_value()
{
T result;
try
{
if(num_values == )
{
throw std::underflow_error("抛出异常:堆为空");
result = values[];
--num_values;
if(num_values != )
{
values[] = values[num_values];
sift_down();
}
return result;
}
}
catch (std::underflow_error &e)
{
cout << "捕捉异常:堆为空" << endl;
}
} void add_value(T value)
{
try
{
if(num_values >= maxsize)
{
throw std::overflow_error("抛出异常:堆为满");
}
values[num_values] = value;
++num_values;
}
catch (std::overflow_error &e)
{
cout << "捕捉异常:堆为满" << endl;
} if((num_values - )> )
sift_up(num_values - );
} T get_value(int index)
{
try
{ if(index >= maxsize)
{
throw std::overflow_error("抛出异常:访问越界");
}
return values[index];
}
catch (std::overflow_error &e)
{
cout << "捕捉异常:访问越界" << endl;
}
}
}; #endif
xyz.cc
#include <iostream>
#include <string>
#include "heap.hh"
#include <stdlib.h>
using namespace std; int main()
{
heap<int, >heapone; for(int i = ; i < ; i++)
{
heapone.add_value(i);
} // int lastval = heapone.get_first_value();
// cout<<"value0 = "<<lastval<<endl;; for(int i = ; i < ; i++)
{
cout<<"value"<<i<<" = "<<heapone.get_value(i)<<endl; // cout<<"value"<<i<<" = "<<heapone.get_first_value()<<endl; } cout<<heapone.get_first_value()<<endl;
for(int i = ; i < ; i++)
{
cout<<"value"<<i<<" = "<<heapone.get_value(i)<<endl; cout<<heapone.get_first_value()<<endl;
for(int i = ; i < ; i++)
{
cout<<"value"<<i<<" = "<<heapone.get_value(i)<<endl; // cout<<"value"<<i<<" = "<<heapone.get_first_value()<<endl; }
cout<<"value"<<i<<" = "<<heapone.get_first_value()<<endl; } }
cs11_c++_lab5待修改的更多相关文章
- 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)
Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...
- 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程
读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- DB1:数据库的创建和文件的修改
在SQL Server中,使用Create Database创建数据库,使用Alter Database命令,能够修改数据库的数据文件和日志文件. 一,创建数据库 1,在创建数据库时,最佳实践是: 创 ...
- ExtJS 4.2 业务开发(三)数据添加和修改
接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...
- 修改eclipse皮肤
习惯了vim黑色背景的程序猿们想必用eclipse时会倍感的不适应吧,不过没关系,因为eclipse的皮肤是可以自己定制的! 下面是我电脑上的eclipse界面,看到这个是不是找回了vim的感觉呢? ...
- ubuntu系统下如何修改host
Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...
- linux centos中添加删除修改环境变量,设置java环境变量
前言 安装完软件必要添加环境变量.指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋.好吧,好记星不如烂笔头.当然,最重要的是,百度出来的都他妈的是如何添加环境变量,只 ...
- 修改session垃圾回收几率
<?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...
随机推荐
- AutoLearnSkills.lua --升级自动学习技能
--[[作者信息: Auto Learn SKills (升级自动学习技能) 作者QQ:247321453 作者Email:247321453@qq.com 修改日期:2014-3-12 功能:在玩家 ...
- JSBinding+Bridge.NET限制
限制: 框架代码不可以访问逻辑代码.这是最基本的. 框架里的函数 f 带数组参数时,逻辑代码调用 f 的话,数组只能做为输入,也就是说,如果在框架函数 f 里修改了数组的内容,那么逻辑代码是无法取得新 ...
- mybatis 与 缓存
首先从配置文件说起,有个cacheEnabled的配置项,当设置为true时(默认就是true),Session就会用一个CachingExecutor来包装我们的Executor实例: public ...
- Oracle 使用SqlPlus管理
Oracle 使用SqlPlus 安装,一键安装,很简单.安装过程,一定要记住密码 一.登陆sqlplus 连接本地服务器,可以直接,打开cmd: 可以直接不用登陆,如果登陆需要输入用户名.密码. s ...
- 回调函数透彻理解Java
http://blog.csdn.net/allen_zhao_2012/article/details/8056665 回调函数透彻理解Java 标签: classjavastringinterfa ...
- 承接Holograms外包 Holograms内容定制 Holograms场景外包开发
HoloLens仿真器与文档现已向开发者们开放 如何为Microsoft HoloLens全息眼镜开发应用? 每款运行Windows 10的设备都使用了相同统一的Windows内核.所以你学习了所有有 ...
- Oracle 违反协议 OALL8 处于不一致状态
http://blog.sina.com.cn/s/blog_a45aac720100yu3h.html ERROR-util.JDBCExceptionReporter>: 违反协议ERROR ...
- 拥有的50个CSS代码片段(上)
1. CSS 重置 ;;;font-size: 100%; font: inherit; vertical-align: baseline; outline: none; -webkit-box-si ...
- PHP空数组转化为json对象的问题
例子: $a = []; echo json_encode($a); echo json_encode($a, JSON_FORCE_OBJECT); 输出结果: [] {}
- SQL 递归树 子父节点相互查询
if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...