优先级队列 C++ 模板实现

来源:互联网 发布:网络上好听的流行歌曲 编辑:程序博客网 时间:2024/06/11 08:53
/** 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;}elseif (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;}

0 0
原创粉丝点击