/*
* File name : priority_queue.cpp
* Function : 优先级队列 C++ 模板实现
* Created on : 2016年5月05日
* Author : beijiwei@qq.com
* Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。
任何单位和个人不经本人允许不得用于商业用途
*
*
*/
#include <cstdio>
#include <iostream>
using namespace std;
typedef struct {
int data;
int priority;
}Inode;
typedef struct {
char data;
int priority;
}Cnode;
template<typename T>
class Pqueue {
private:
T array[10];
int head;
int tail;
int size;
public:
bool queue_in(T one) {
if (tail == 9) {
return false;
}
for (int i = 0; i <= tail; i++) {
if (i==tail) {
array[i] = one;
break;
}
else
if (one.priority < array[i].priority) {
for (int j = tail + 1; j > i ; j--) {
array[j] = array[j - 1];
}
array[i] = one;
break;
}
}
tail++;
return true;
}
bool queue_out(T & A) {
if (head == tail) {
return false;
}
A = array[head++];
return true;
}
bool is_empty() {
return (head == tail) ? true : false;
}
bool get_head_obj(T & A)
{
if (is_empty()) {
return false;
}
else {
A.data_object = array[head];
return true;
}
}
Pqueue() {
for (int i = 0; i < 10; i++) {
array[i].priority = 0;
}
head = 0;
tail = 0;
size = 0;
}
~Pqueue() {
head = 0;
tail = 0;
size = 0;
}
};
int main(int argc, char** argv)
{
Pqueue<Inode> Q;
Pqueue<Cnode> CQ;
Inode A, B, C,D,E,F, elem ;
Cnode Ca,Cb,Cc,Cd,Ce,Cf,Celem;
A.data = 10;
A.priority = 0;
B.data = 11;
B.priority = 2;
C.data = 12;
C.priority = 1;
D.data = 13;
D.priority = 5;
E.data = 15;
E.priority = 3;
F.data = 14;
F.priority = 4;
Q.queue_in(A);
Q.queue_in(B);
Q.queue_in(C);
Q.queue_in(D);
Q.queue_in(E);
Q.queue_in(F);
Q.queue_out(elem);
cout << elem.priority << endl;
Q.queue_out(elem);
cout << elem.priority << endl;
Q.queue_out(elem);
cout << elem.priority << endl;
Q.queue_out(elem);
cout << elem.priority << endl;
Q.queue_out(elem);
cout << elem.priority << endl;
Q.queue_out(elem);
cout << elem.priority << endl;
cout << "I End" << endl;
Ca.data = 'a';
Ca.priority = 0;
Cb.data = 'b';
Cb.priority = 2;
Cc.data = 'c';
Cc.priority = 1;
Cd.data = 'd';
Cd.priority = 5;
Ce.data = 'e';
Ce.priority = 3;
Cf.data = 'f';
Cf.priority = 4;
CQ.queue_in(Ca);
CQ.queue_in(Cb);
CQ.queue_in(Cc);
CQ.queue_in(Cd);
CQ.queue_in(Ce);
CQ.queue_in(Cf);
CQ.queue_out(Celem);
cout << Celem.priority << endl;
CQ.queue_out(Celem);
cout << Celem.priority << endl;
CQ.queue_out(Celem);
cout << Celem.priority << endl;
CQ.queue_out(Celem);
cout << Celem.priority << endl;
CQ.queue_out(Celem);
cout << Celem.priority << endl;
CQ.queue_out(Celem);
cout << Celem.priority << endl;
cout << "C End" << endl;
return 0;
}
优先级队列 C++ 模板实现
最新推荐文章于 2024-07-19 23:27:54 发布