为了让初学者更好地了解队列,这里写出了链式队列的实现模板,希望对大家有帮助,如果想看顺序队列的实现,请查看本专栏上一篇文章。
#pragma once
template <typename T>
class ChainQueue {
public:
ChainQueue();
private:
typedef struct QNode {
T data;
struct QNode* next;
} QNode, *QNodePtr;
typedef struct {
QNodePtr front;
QNodePtr tail;
} LinkQueue;
LinkQueue m_Queue;
public:
bool push(T tValue);
bool pop(T* result);
bool clear();
};
template<typename T>
inline ChainQueue<T>::ChainQueue()
{
QNodePtr pNewNode = new QNode();
m_Queue.front = m_Queue.tail = pNewNode;
m_Queue.front->next = nullptr;
}
template<typename T>
inline bool ChainQueue<T>::push(T tValue)
{
QNodePtr pNode = new QNode;
pNode->data = tValue;
pNode->next = nullptr;
m_Queue.tail->next = pNode;
m_Queue.tail = pNode;
return true;
}
template<typename T>
inline bool ChainQueue<T>::pop(T* result)
{
if (m_Queue.front->next == nullptr) {
return false;
}
else {
QNodePtr pRemovedNode = m_Queue.front->next;
*result = pRemovedNode->data;
m_Queue.front->next = pRemovedNode->next;
if (m_Queue.tail == pRemovedNode) {
m_Queue.tail = m_Queue.front;
}
delete pRemovedNode;
return true;
}
}
template<typename T>
inline bool ChainQueue<T>::clear()
{
QNodePtr pNode = m_Queue.front->next;
while (pNode) {
QNodePtr pTempNode = pNode;
pNode = pNode->next;
std::cout << "数据为" << pTempNode->data << "的节点释放成功" << std::endl;
delete pTempNode;
}
m_Queue.front->next = nullptr;
m_Queue.tail = m_Queue.front;
return true;
}
如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!