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

  普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (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;
	}
}

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

 

原文链接: https://www.cnblogs.com/kzcdqbz/p/4793799.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/221710

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午11:24
下一篇 2023年2月13日 上午11:24

相关推荐