隊列也屬於鏈表的一種,他的特點是先入先出
也就是說在對位插入節點,在對頭移除節點
template<typename T>
struct Node{
public:
Node(T value, Node<T> *next):
value(value), next(next){}
Node(T value): value(value){}
Node(){}
public:
T value;
Node<T>* next;
};
主要操作包括入隊和出隊
template <class T>
class LinkQueue
{
public:
LinkQueue();
~LinkQueue(){}
// 入隊
void push(T val);
// 出隊
void pop();
bool isEmpty(){ return count == 0;}
int size()const {return count;}
void printLink();
private:
int count;
Node<T> *phead;
Node<T> *pend;
};
template <typename T>
LinkQueue<T>::LinkQueue(){
count = 0;
phead = new Node<T>(0, nullptr);
pend = phead;
}
template <typename T>
void LinkQueue<T>::push(T val){
// 在尾部插入
Node<T> *node = new Node<T>(val, nullptr);
pend->next = node;
pend=node; // 尾指針
count ++;
}
template <typename T>
void LinkQueue<T>::pop(){
if(phead->next!=nullptr){
Node<T>* node = phead->next;
phead->next = phead->next->next;
count --;
}
}
template <typename T>
void LinkQueue<T>::printLink(){
using namespace std;
Node<T> *node = phead;
while (node->next!=nullptr) {
node = node->next;
T value = node->value;
cout<< value << " ";
}
cout << endl;
}