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

/*
* 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值