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待修改的更多相关文章

  1. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  2. 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程

    读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...

  3. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

  4. DB1:数据库的创建和文件的修改

    在SQL Server中,使用Create Database创建数据库,使用Alter Database命令,能够修改数据库的数据文件和日志文件. 一,创建数据库 1,在创建数据库时,最佳实践是: 创 ...

  5. ExtJS 4.2 业务开发(三)数据添加和修改

    接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...

  6. 修改eclipse皮肤

    习惯了vim黑色背景的程序猿们想必用eclipse时会倍感的不适应吧,不过没关系,因为eclipse的皮肤是可以自己定制的! 下面是我电脑上的eclipse界面,看到这个是不是找回了vim的感觉呢? ...

  7. ubuntu系统下如何修改host

    Ubuntu系统的Hosts只需修改/etc/hosts文件,在目录中还有一个hosts.conf文件,刚开始还以为只需要修改这个就可以了,结果发现是需要修改hosts.修改完之后要重启网络.具体过程 ...

  8. linux centos中添加删除修改环境变量,设置java环境变量

    前言 安装完软件必要添加环境变量.指令很少,然而长时间不写就会不自信:我写的对吗?于是百度开始,于是发现又是各有千秋.好吧,好记星不如烂笔头.当然,最重要的是,百度出来的都他妈的是如何添加环境变量,只 ...

  9. 修改session垃圾回收几率

    <?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...

随机推荐

  1. Struts2中通过超链接传参数要注意的问题

    写到分页的功能,在传递页码pageNo的时候遇到了参数接收不正确的问题,我本来在action中是定义了一个pageNo字符串参数和一个Page类参数,Page是一个封装了页面要显示的数据集合和页面信息 ...

  2. Web前端开发学习心得(一)

    说快也快,说慢也慢.自学前端一个月了,进步不算大,不过仔细想来,倒也收获不少.码几行字,一是总结经验,二是继往开来. 刚开始是跟慕课网学的HTML+CSS,慕课网的课程虽然好,但好多知识都是特别基础的 ...

  3. [原] wmic: Invalid XSL format (or) file name错误解决方法

    之前运行wmic命令正确,今天在服务器上出现Invalid XSL format (or) file name的提示,搜索了一下,在这里找到了答案: http://www.ctkn.net/2011/ ...

  4. MySQL 使用笔记(一) 关联

    2016-12-16 一.当前未掌握总结: 目前MySQL中不会的内容: 1.临时表(变量表) 2.存储过程 3.游标 4.函数 二.关联 内联.左关联.右关联.外联 (一).标准sql语句中的关联及 ...

  5. MSSQL-实用小工具

    1.创建查询辅助表 create table nums (n int not null) alter table nums add constraint PK_NUMS primary key clu ...

  6. net不安装Oracle11g客户端直接使用ODAC

    好处: 1.不安装客户端也能访问服务器上的oracle(假设Application Server与DB Server 分开) 2.不需要安装ODAC 3.不需要配置TnsNames.Ora文件 缺点: ...

  7. SQL Server Analysis Services SSAS Processing Error Configurations

    转载:https://www.mssqltips.com/sqlservertip/3476/sql-server-analysis-services-ssas-processing-error-co ...

  8. java容器的一些存取用法

    关于集合(list,set,map)的遍历与增强for循环的使用     java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以 ...

  9. C#Winform连接Oracle数据库 , 及角色讲解

    http://blog.sina.com.cn/s/blog_900ca29d0102vn3r.html 一.连接方法 (1)System.Data.OracleClient 注意1:此方法在.NET ...

  10. PBR实现

    我们的目标:UnityStandard 我一直作Unity开发,所以环境也就选择了Unity.目标也就是尽可能接近UnityStandard的效果,不过主要为了学习PBR,所以就只实现基本的PBR和法 ...