标签:
/* * 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; }
标签:
原文地址:http://blog.csdn.net/beijiwei/article/details/51330518