栈操作
入队
template<typename T>
void LinkedListQueue<T>::enqueue(T e) {
if (tail == nullptr)
{
tail = new QNode<T>(e);
head = tail;
}
else {
tail->next = new QNode<T>(e);
tail = tail->next;
}
++size;
}
出队
template<typename T>
T LinkedListQueue<T>::dequque() {
if (!isEmpty())
{
QNode<T>* retNode = head;
head = head->next;
retNode->next = nullptr;
if (head == nullptr)
{
tail = nullptr;
}
--size;
return retNode->e;
}
}
代码清单
LinkedListQueue.h
#ifndef C___LINKEDLISTQUEUE_H
#define C___LINKEDLISTQUEUE_H
#include <iostream>
template<typename T>
class QNode {
public:
QNode() : e(0), next(nullptr) {}
QNode(T& E) : e(E), next(nullptr) {}
QNode(T& E, QNode<T>* Next) : e(E), next(Next) {}
T e;
QNode<T>* next;
};
template<typename T>
class LinkedListQueue : public QNode<T>
{
public:
LinkedListQueue() :head(nullptr), tail(nullptr), size(0) {}
int getSize()const;
bool isEmpty()const;
void enqueue(T e);
T dequque();
T getFront();
void print()const;
private:
QNode<T>* head;
QNode<T>* tail;
int size;
};
template<typename T>
int LinkedListQueue<T>::getSize() const {
return size;
}
template<typename T>
bool LinkedListQueue<T>::isEmpty() const {
return size == 0;
}
template<typename T>
void LinkedListQueue<T>::enqueue(T e) {
if (tail == nullptr)
{
tail = new QNode<T>(e);
head = tail;
}
else {
tail->next = new QNode<T>(e);
tail = tail->next;
}
++size;
}
template<typename T>
T LinkedListQueue<T>::dequque() {
if (!isEmpty())
{
QNode<T>* retNode = head;
head = head->next;
retNode->next = nullptr;
if (head == nullptr)
{
tail = nullptr;
}
--size;
return retNode->e;
}
}
template<typename T>
T LinkedListQueue<T>::getFront() {
if (!isEmpty())
{
return head->e;
}
}
template<typename T>
void LinkedListQueue<T>::print()const {
QNode<T>* prev = head;
std::cout << "LinkListQueue: size = " << size << std::endl;
std::cout << "front ";
std::cout << "[";
while (prev != nullptr) {
std::cout << prev->e;
if (prev->next != nullptr) {
std::cout << ", ";
}
prev = prev->next;
}
std::cout << "] tail" << std::endl;
}
#endif
main.cpp
int main()
{
LinkedListQueue<int>*lq = new LinkedListQueue<int>();
for(int i = 0;i<10;++i)
{
if(i>=5)
{
lq->dequque();
lq->print();
} else{
lq->enqueue(i);
lq->print();
}
}
cout<<"getSize()"<<lq->getSize()<<endl;
cout<<"isEmpty()"<<lq->isEmpty()<<endl;
cout<<"getFront()"<<lq->getFront()<<endl;
return 0;
}