【数据结构与算法】链式队列实现

为了让初学者更好地了解队列,这里写出了链式队列的实现模板,希望对大家有帮助,如果想看顺序队列的实现,请查看本专栏上一篇文章。

#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;
}

如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!

你可能感兴趣的:(数据结构与算法,数据结构,c++,算法)