數據結構--最小優先隊列

最小優先隊列

總體表述

隊列屬於容器的一種。
不同於雙向鏈表類容器,可以在容器的任意位置執行元素插入和刪除,
隊列容器只允許在尾部插入元素,在首部刪除元素。
隊列屬於操作受限的容器。
最小優先隊列,屬於具備特殊性質的隊列。
向隊列添加元素時,按優先級確定插入位置。
從隊列取元素時,每次取出的均是當前隊列具有最小優先級的元素。

接口設計

template <typename T>
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<T> GetHeap() const
	{
		return m_mhHeap;
	}
private:
	Heap::MinHeap<T> m_mhHeap;
};

實現

構造

template <typename T>
MinPriorityQueue<T>::MinPriorityQueue()
{
}

拷貝構造

template <typename T>
MinPriorityQueue<T>::MinPriorityQueue(const MinPriorityQueue& mpqA_)
{
	m_mhHeap = mpqA_.m_mhHeap;
}

賦值

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

	m_mhHeap = mpqA_.m_mhHeap;
	return *this;
}

析構

template <typename T>
MinPriorityQueue<T>::~MinPriorityQueue()
{
}

入隊列

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

出隊列

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

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

查詢隊首元素

template <typename T>
typename T MinPriorityQueue<T>::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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章