動態隊列
總體表述
隊列屬於容器的一種。
不同於雙向鏈表類容器,可以在容器的任意位置執行元素插入和刪除,
隊列容器只允許在尾部插入元素,在首部刪除元素。
隊列屬於操作受限的容器。
接口設計
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)