front指向链队列的头结点
rear指向终端结点
rear->next=NULL;
#include <iostream>
using namespace std;
class Node//结点类
{
public:
Node();
~Node();
int DATA;
Node *next;
};
Node::Node()
{
}
Node::~Node()
{
}
class queue
{
public:
queue();
~queue();
bool popqueue(int e);//出队
bool pushqueue(const int &e);//入队
bool isempty();//队列是否为空
bool foreach_queue();//遍历队列
private:
Node *front;
Node *rear;
};
queue::queue()
{
Node *ptemp = new Node;//头结点
front = ptemp;
rear = ptemp;
rear->next = NULL;
}
queue::~queue()
{
}
bool queue::popqueue(int e)
{
if (front == rear)
{
cout << "队列为空" << endl;
return false;
}
Node *p = front->next;//此为要删除的结点
e = p->DATA;
front->next = p->next;
if (p->next = rear->next)
{
rear = front;
}
free(p);
return true;
}
bool queue::pushqueue(const int &e)
{
Node *temp = new Node;//新建结点
temp->DATA = e;
temp->next = NULL;
rear->next = temp;
rear = temp;
return true;
}
bool queue::isempty()
{
return (rear == front) ? true : false;
}
bool queue::foreach_queue()
{
if (isempty())
{
return false;
}
Node *p = front;//找到头结点
while ((p=p->next) != NULL)
{
cout << p->DATA << " ";
}
cout << endl;
return true;
}
void main()
{
queue q1;
int a=0;
q1.pushqueue(1);
q1.pushqueue(2);
q1.pushqueue(3);
q1.pushqueue(4);
q1.foreach_queue();
q1.popqueue(a);
q1.foreach_queue();
system("pause");
}