您的位置:首页 > 理论基础 > 数据结构算法

[数据结构]Priority_queue(优先级队列)

2016-04-30 22:15 337 查看
//.h
const int MAX_LEN = 100;
template<class List_entry>
class p_queue
{
public:
p_queue();
bool full();
bool empty();
int size();
void clear();
void insert(const List_entry ¤t);
void remove();
void creation();
void print();

private:
int count;
List_entry entry[MAX_LEN];
void insert_heap(const List_entry ¤t, int low, int high);
};

//.cpp
#include<iostream>
#include"p_queue.h"
using namespace std;

template<class List_entry>
p_queue<List_entry>::p_queue()
{
count = 0;
}

template<class List_entry>
bool p_queue<List_entry>::full()
{
return count==MAX_LEN;
}

template<class List_entry>
bool p_queue<List_entry>::empty()
{
return count==0;
}

template<class List_entry>
int p_queue<List_entry>::size()
{
return count;
}

template<class List_entry>
void p_queue<List_entry>::clear()
{
count = 0;
}

template<class List_entry>
void p_queue<List_entry>::insert(const List_entry ¤t)
{
entry[size()] = current;
count++;
creation();
}

template<class List_entry>
void p_queue<List_entry>::insert_heap(const List_entry & current, int low, int high)
{
int large = 2 * low + 1;
while (large <= high) {
if (large < high&&entry[large] < entry[large + 1])
large++;		//将下标large调整为最大孩节点
if (entry[large] < current)break;
else {				//promote entry[large]
entry[low] = entry[large];
low = large;
large = 2 * low + 1;
}
}
entry[low] = current;

}

template<class List_entry>
void p_queue<List_entry>::remove()
{
for (int i = 0; i < size()-1; i++) {
entry[i] = entry[i + 1];
}
count--;
creation();
}

template<class List_entry>
void p_queue<List_entry>::creation()
{
for (int low = count / 2 - 1; low >= 0; low--) {
List_entry current = entry[low];
insert_heap(current, low, count - 1);
}
}

template<class List_entry>
void p_queue<List_entry>::print()
{
for (int i = 0; i < size(); i++)
cout << entry[i] << ' ';
cout << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: