1.头文件:
# include<iostream>
using namespace std;
struct LinkNode{ //自定义数据类型:结点
int date;
LinkNode* link;
LinkNode(LinkNode* ptr=NULL):link(ptr){}
LinkNode(const int x,LinkNode* ptr=NULL):date(x),link(ptr){}
};
class LinkedQueue{ //链式队列
private:
LinkNode* front; //队头指针
LinkNode* rear; //队尾指针
public:
LinkedQueue():front(NULL),rear(NULL){} //构造函数:构造空队列
void makeEmpty(); //将表置空
~LinkedQueue(){ makeEmpty();} //析构函数:(*不能直接用delete清空全部存储空间的析构函数往往需要调用另一个函数帮助清空)
bool EnQueue(int& x); //进队函数
bool DeQueue(int& x); //出队函数
bool getFront(int& x); //取队头
bool isEmpty(){ return (front==NULL)?true:false;} //判断表空
int getSize(); //求队列元素个数
friend ostream& operator<<(ostream& ostr,LinkedQueue& Q); //输出运算符重载
};
2.源文件:
# include<iostream>
# include"LinkedQueue.h"
using namespace std;
void LinkedQueue::makeEmpty(){
LinkNode* ptr;
while(isEmpty()==false){
ptr=front;
front=front->link;
delete ptr;
rear=NULL; //删除尾结点后尾指针需要置空
}
}
bool LinkedQueue::EnQueue(int& x){
if(isEmpty()){
front=rear=new LinkNode(x);
if(front==NULL) return false;
}
else{
rear->link=new LinkNode(x);
if(rear->link==NULL) return false;
rear=rear->link;
}
return true;
}
bool LinkedQueue::DeQueue(int& x){
if(isEmpty()) return false;
else{
x=front->date;
LinkNode* current=front;
front=front->link;
delete current;
}
return true;
}
bool LinkedQueue::getFront(int& x){
if(isEmpty()) return false;
else{
x=front->date;
return true;
}
}
int LinkedQueue::getSize(){
int count=0;
LinkNode* ptr=front;
while(ptr!=NULL){
count++;
ptr=ptr->link;
}
return count;
}
ostream& operator<<(ostream& ostr,LinkedQueue& Q){
ostr<<"队列中有元素个数:"<<Q.getSize()<<endl;
LinkNode* current=Q.front;int i=0;
while(current!=NULL){
ostr<<++i<<":"<<current->date<<endl;
current=current->link;
}
return ostr;
}