Queue.hpp
#include<iostream>
using namespace std;
typedef struct QueueNode{
QueueNode()
:next(nullptr)
{}
struct QueueNode* next;
int data;
}Node;
class Queue{
public:
Queue()
:_front(nullptr)
,_rear(nullptr)
{}
//申请节点
Node* BuyQueueNode(const int data){
Node* pNewNode = new Node;
pNewNode->next = nullptr;
pNewNode->data = data;
return pNewNode;
}
//判断队列是否为空
int QueueEmpty(){
return _front == nullptr;
}
//入队操作
void QueuePush(const int data){
Node* pNewNode = BuyQueueNode(data);
if(QueueEmpty())
_rear = _front = pNewNode;
else{
_rear->next = pNewNode;
_rear = pNewNode;
}
}
//出队操作
void QueuePop(){
if(QueueEmpty())
return;
Node* pDelNode = _front;
_front = pDelNode->next;
delete pDelNode;
pDelNode = nullptr;
}
//队列元素大小
int QueueSize(){
int count = 0;
Node* pCur = _front;
while(pCur){
count++;
pCur = pCur->next;
}
return count;
}
//队头元素值
int QueueFrontData(){
return _front->data;
}
//队尾元素值
int QueueRearData(){
return _rear->data;
}
//打印队列元素
void QueuePrint(){
Node* pCur = _front;
while(pCur){
cout<<pCur->data<<" ";
pCur = pCur->next;
}
cout<<endl;
}
~Queue(){
Node* pCur = _front;
while(pCur){
if(_front){
_front = pCur->next;
delete pCur;
pCur = _front;
}
}
_front = _rear = nullptr;
}
private:
Node* _front;
Node* _rear;
};
Queue.cpp
#include"Queue.hpp"
int main(){
Test();
return 0;
}
测试部分
void Test(){
Queue q;
q.QueuePush(1);
q.QueuePush(2);
q.QueuePush(3);
q.QueuePush(4);
q.QueuePush(5);
q.QueuePush(6);
q.QueuePush(7);
q.QueuePrint();
q.QueuePop();
q.QueuePrint();
cout<<q.QueueSize()<<endl;
cout<<q.QueueFrontData()<<endl;
cout<<q.QueueRearData()<<endl;
}