算法学习
C++ 及算法
C++博客
首页
新随笔
联系
管理
最小堆的实现(c++模板)
#define
MAXN 10000
template
<
typename Type
>
class
Heap
{
private
:
int
size;
Type data[MAXN
+
1
];
void
siftdown(
int
pos );
public
:
Heap();
void
push( Type key );
Type pop();
void
make_heap();
bool
empty();
void
clear();
int
get_size();
}
;
template
<
typename Type
>
Heap
<
Type
>
::Heap()
{
size
=
0
; }
template
<
typename Type
>
int
Heap
<
Type
>
::get_size()
{
return
size; }
template
<
typename Type
>
bool
Heap
<
Type
>
::empty()
{
return
size
==
0
;}
template
<
typename Type
>
void
Heap
<
Type
>
::clear()
{
size
=
0
; }
template
<
typename Type
>
void
Heap
<
Type
>
::siftdown(
int
pos )
{
while
( pos
<<
1
<=
size )
{
int
t
=
pos
<<
1
;
if
( (pos
<<
1
)
+
1
<=
size
&&
data[(pos
<<
1
)
+
1
]
<
data[t] ) t
=
(pos
<<
1
)
+
1
;
if
( data[t]
<
data[pos] )
{
Type tmp
=
data[t]; data[t]
=
data[pos]; data[pos]
=
tmp;
pos
=
t; }
else
break
;
}
}
template
<
typename Type
>
void
Heap
<
Type
>
::push( Type key )
{
data[
++
size]
=
key;
int
pos
=
size;
while
( pos
>
1
)
{
if
( data[pos
>>
1
]
>
data[pos] )
{
Type tmp
=
data[pos];
data[pos]
=
data[pos
>>
1
]; data[pos
>>
1
]
=
tmp;
pos
>>=
1
; }
else
break
;
}
}
template
<
typename Type
>
Type Heap
<
Type
>
::pop()
{
Type tmp
=
data[
1
]; data[
1
]
=
data[size];
data[size]
=
tmp; size
--
;
siftdown(
1
);
return
data[size
+
1
];
}
posted on 2009-04-16 18:31
Darren
阅读(4348)
评论(4)
编辑
收藏
引用
评论:
#
re: 最小堆的实现(c++模板) 2009-04-16 22:57 |
打酱油
传说中的手写堆?Orz。。。
回复
更多评论
#
re: 最小堆的实现(c++模板) 2009-04-17 16:57 |
brightcoder
void make_heap()定义哪去了?
回复
更多评论
#
re: 最小堆的实现(c++模板) 2009-04-17 17:04 |
Darren
@brightcoder
那个应该很好写了,循环一次就行了。
本来是要写的,不过发现一次次插入就能建堆了。
回复
更多评论
#
re: 最小堆的实现(c++模板)
2009-05-17 16:55 |
myo1olove
高人!!!
太敬佩你了,我已‘偷借’你好几篇代码了!!!
thank you
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
动态规划(13)
数据结构(11)
搜索(9)
图论(10)
未分类(6)
ACMers
搜索
积分与排名
积分 - 108976
排名 - 228
最新随笔
1. 换个博客,重新开始学习。。。
2. pku 1691 Painting A Board 状态压缩DP
3. HDU 1255
4. PKU 1151
5. 2009年ACM-ICPC亚洲区预选赛共设十五个赛区如下(按现场赛日期排序)
6. acmer必看的26个对acm态度
7. ZJU 3228 Searching the String ( AC 自动机 )
8. Pku 3169 Layout
9. Pku 1986 Distance Queries
10. Pku 1276 Cash Machine
最新评论
1. re: AVL树的插入和删除操作
评论内容较长,点击标题查看
--jasonkent27@163.com