队列 链表实现
全部代码
#include <iostream>
#include <stdexcept>
using namespace std;
template<typename T>
class Queue{
private:
struct Node{
T data;
Node* next;
Node(T d):data(d),next(NULL){}
};
Node* front;//指向队首
Node *rear;//指向队尾后面的一个元素
int size;
public:
//队列构造函数
Queue():front(NULL),rear(NULL),size(0) {}
~Queue();//析构函数
void enqueue(T element);//入队函数
T dequeue();//出队函数
T getFront() const;//获取队头元素
int getSize() const;//获取队列长度
};
template<typename T>
Queue<T>::~Queue(){
while(front){
Node * temp = front;
front = front->next;
delete temp;
}
}//析构函数 遍历整张链表
template<typename T>
void Queue<T>::enqueue(T element){
if(rear == NULL){//当前队列只有一个元素
rear = new Node(element);
front = rear;
}else{
rear->next = new Node(element);
rear = rear->next;
}
size++;
}//入队函数
template<typename T>
T Queue<T>::dequeue(){
if(front == NULL){//队列为空
throw std::underflow_error("Queue is empty");
}
if(size == 0){
rear = NULL;
}
T element = front->data;
Node *temp = front;
front = front->next;
delete temp;
size--;
return element;
}//出队函数
template<typename T>
T Queue<T>::getFront() const{
if(front == NULL){//队列为空
throw std::underflow_error("Queue is empty");
}
return front->data;
}//获取队头元素
template<typename T>
int Queue<T>::getSize() const{
return size;
}//获取队列长度
int main() {
Queue<int> q;
q.enqueue(3);
q.enqueue(4);
cout << q.getFront() << endl;
q.enqueue(5);
cout << q.getFront() << endl;
q.dequeue();
cout << q.getFront() << endl;
cout << q.getSize() << endl;
return 0;
}