通过两个链表节点指针实现队列,一个当作队头,一个当作队尾,入队就是往尾节点后插入,退队就是删除头节点
template<class T>
struct ListNode {
T data;
ListNode<T> *next;
ListNode(const T & data) {
this->data = data;
this->next = nullptr;
}
};
template<class T>
class Queue {
public:
Queue();
Queue(const Queue<T> & q);
~Queue();
void enQueue(const T & elem); // 入队
void deQueue(); // 退队
const T & front() const { return m_head->data; } // 返回队头元素
const T & back() const { return m_tail->data; } // 返回队尾元素
const size_t size() const { return m_size; } // 返回队列长度
bool empty() const { return 0 == m_size; } // 判断队列是否为空
private:
ListNode<T> *m_head, *m_tail; // 记录头节点和尾节点
size_t m_size;
};
template<class T>
Queue<T>::Queue()
{
m_head = m_tail = nullptr;
m_size = 0;
}
template<class T>
Queue<T>::Queue(const Queue<T>& q)
{
ListNode