#include<iostream>
#include<stdexcept>
using namespace std;
class Lqueue{
public:
Lqueue():m_rear(NULL),m_front(NULL){}
~Lqueue(){
for(Node *n;m_front;m_front=n)
{//从前到后析构 当m_front为0时停止
n=m_front->m_next;
delete m_front;
}
}
void push(int data){
Node *node=new Node(data,NULL);//这一步完成了对m_data和m_next的初始化 Node(int data=0):m_data(data),m_next(NULL){}
if(m_rear==NULL)
{ m_front=node;
m_rear=node;
}else
{
m_rear->m_next=node;
m_rear=node;
}
}
int pop(){
if(empty())
throw UnderFlow();
int temp=m_front->m_data;
m_front=m_front->m_next;
delete m_front;
if(!(m_front->m_next))
m_rear=NULL;
return temp;
}
bool empty(){
return !m_front&&!m_rear;
}
private:
class Node{
public:
Node(int data=0,Node *next=NULL):m_data(data),m_next(next){}
int m_data;
Node *m_next;
};
class UnderFlow{
const char*what()const throw(){
cout<<"队列下溢"<<endl;
}
};
Node *m_rear;//后端
Node *m_front;//前端
};
int main(){
try{
Lqueue lqueue;
for(int i=0;i<10;i++)
lqueue.push(i);
while(!(lqueue.empty()))
cout<<lqueue.pop()<<endl;
cout<<endl;
}
catch(exception &ex){
cout<<ex.what()<<endl;
}
return 0;
}