码迷,mamicode.com
首页 > 编程语言 > 详细

C++ 优先队列的简单实现

时间:2015-09-09 11:21:17      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:

  普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-out)的行为特征。

 

STL中使用heap实现优先队列,底层容器使用的是vector。这里我们使用一个简单数组来代替vector。

以下是一个简单的优先队列实现方案:

template <class T>
class priqueue{
public:
	priqueue(int m){//构造函数传入队列的总长度
		maxsize=m;
		x=new T[maxsize+1];//这里为了计数方便,让下标从1开始
						   //此时,如果一个元素下标为i,则它的
		                                   //左子节点在数组中的下标就是2i
		                                   //右子节点在数组中的下标是2i+1
		n=0;
	}
	void Add(T t){//这里构建一个小顶堆
		x[++n]=t;
		int p;
		for(int i=n;i>1 && x[p=i/2]>x[i];i=p){
			swap(p,i);
		}
	}
	T extractMin(){
		T temp=x[1];//取出堆顶权值最大的那个元素
		x[1]=x[n--];//序列长度减1,并将最后一个元素放在堆顶
		int p;
		for(int i=1;(p=2i)<n;i=p){
			if(p+1<n && x[p]>x[p+1])
				p++;
			if(x[p]>=x[i])//移动到位
				break;
			swap(p,i);
		}
		return temp;
	}
private:
	int n;//队列中元素个数
	int maxsize;//整个队列的总长度
	T *x;//队列指针
	void swap(int i,int j){
		T temp=x[i];
		x[i]=x[j];
		x[j]=temp;
	}
}

  以上的优先队列实现中没有写明相应的保障机制和析构函数,只是一个简单实现。有错误之处还望批评指正。

 

C++ 优先队列的简单实现

标签:

原文地址:http://www.cnblogs.com/kzcdqbz/p/4793799.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!