数据结构--最小优先队列

最小优先队列

总体表述

队列属于容器的一种。
不同于双向链表类容器,可以在容器的任意位置执行元素插入和删除,
队列容器只允许在尾部插入元素,在首部删除元素。
队列属于操作受限的容器。
最小优先队列,属于具备特殊性质的队列。
向队列添加元素时,按优先级确定插入位置。
从队列取元素时,每次取出的均是当前队列具有最小优先级的元素。

接口设计

template 
class MinPriorityQueue
{
public:
	MinPriorityQueue();
	virtual ~MinPriorityQueue();

	MinPriorityQueue(const MinPriorityQueue& dqA_);
	MinPriorityQueue operator=(const MinPriorityQueue& dqA_);

	void In(const T& nValue_);
	T Out();
	T Peek() const;
	bool IsEmpty() const;
	Heap::MinHeap GetHeap() const
	{
		return m_mhHeap;
	}
private:
	Heap::MinHeap m_mhHeap;
};

实现

构造

template 
MinPriorityQueue::MinPriorityQueue()
{
}

拷贝构造

template 
MinPriorityQueue::MinPriorityQueue(const MinPriorityQueue& mpqA_)
{
	m_mhHeap = mpqA_.m_mhHeap;
}

赋值

template 
typename MinPriorityQueue MinPriorityQueue::operator=(const MinPriorityQueue& mpqA_)
{
	if (this == &mpqA_)
	{
		return *this;
	}

	m_mhHeap = mpqA_.m_mhHeap;
	return *this;
}

析构

template 
MinPriorityQueue::~MinPriorityQueue()
{
}

入队列

template 
void MinPriorityQueue::In(const T& nValue_)
{
	m_mhHeap.Add(nValue_);
}

出队列

template 
typename T MinPriorityQueue::Out()
{
	if (IsEmpty())
	{
		throw "queue is empty";
	}

	T _nValue = m_mhHeap.Get(1);
	m_mhHeap.Delete(1);
	return _nValue;
}

查询队首元素

template 
typename T MinPriorityQueue::Peek() const
{
	if (IsEmpty())
	{
		throw "queue is empty";
	}

	return m_mhHeap.Get(1);
}

时间复杂度

假设队列中元素个数为n

构造

时间复杂度Θ(1)

拷贝构造

时间复杂度Θ(n)

赋值

时间复杂度Θ(n)

析构

时间复杂度Θ(1)

入队列

时间复杂度O(lg(n))

出队列

时间复杂度O(lg(n))

查询队首元素

时间复杂度O(1)

你可能感兴趣的:(Algorithm,&,DataStruct)