數據結構--動態隊列

動態隊列

總體表述

隊列屬於容器的一種。
不同於雙向鏈表類容器,可以在容器的任意位置執行元素插入和刪除,
隊列容器只允許在尾部插入元素,在首部刪除元素。
隊列屬於操作受限的容器。

接口設計

template <typename T>
class DynQueue
{
public:
	DynQueue();
	virtual ~DynQueue();

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

	void In(const T& nValue_);
	T Out();
	T Peek() const;
	bool IsEmpty() const;
	List::DoubleList<T> GetList() const
	{
		return m_List;
	}
private:
	List::DoubleList<T> m_List;
};

實現

構造

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

拷貝構造

template <typename T>
DynQueue<T>::DynQueue(const DynQueue& dqA_)
{
	m_List = dqA_.m_List;
}

賦值

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

	m_List = dqA_.m_List;
	return *this;
}

析構

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

插入

template <typename T>
void DynQueue<T>::In(const T& nValue_)
{
	m_List.InsertLast(nValue_);
}

刪除

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

	List::DoubleList<T>::Node* _pFirst = m_List.GetFirst();
	T _nValue = _pFirst->GetValue();
	m_List.DeleteFirst();
	return _nValue;
}

查找

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

	List::DoubleList<T>::Node* _pFirst = m_List.GetFirst();
	return _pFirst->GetValue();
}

時間複雜度

假設隊列內元素個數爲n

構造

時間複雜度Θ(1)

拷貝構造

時間複雜度Θ(n)

賦值

時間複雜度Θ(n)

析構

時間複雜度Θ(n)

插入

時間複雜度Θ(1)

刪除

時間複雜度Θ(1)

搜索

時間複雜度Θ(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章