#include<iostream>
using namespace std;
struct node
{
int data;
node *next, *prior;
};
class queue
{
private:
node * front, *rear;
public:
queue(int e);
~queue(){}
void enqueue(int e);
void dequeue();
void Enqueue(int e);
void Dequeue();
void print();
};
queue::queue(int e)
{
node *s;
s =rear=front=new node;
s->data = e;
rear->next = front;
rear->prior =front;
front->next =rear;
front->prior = rear;
}
void queue::enqueue(int e)
{
node *s = new node;
s->data = e;
s->next = rear->next;
rear->next = s;
s->prior = front->prior;
front->prior = s;
front = s;
rear = front->prior;
}
void queue::dequeue ()
{
if (rear == front)return;
node *s = new node;
cout << "pop:" << rear->data << endl;
s = rear->prior;
s->next = rear->next;
front->prior = s;
delete rear;
rear = s;
}
void queue::Enqueue(int e)
{
node *s = new node;
s->data = e;
s->prior = front->prior;
front->prior = s;
s->next = rear->next;
rear->next = s;
rear = s;
front = rear->next;
}
void queue::Dequeue()
{
if (rear == front)return;
node *s = new node;
cout << "pop:" << front->data << endl;
s = front->next;
s->prior = front->prior;
rear->next = s;
delete front;
front = s;
}
void queue::print()
{
node *p = front;
do {
cout << p->data << ' ';
p = p->next;
} while (p != front);
cout << endl;
}
int main(void)
{
queue A(1);
A.enqueue(2);
A.dequeue();
A.enqueue(3);
A.Enqueue(4);
A.enqueue(5);
A.dequeue();
A.Dequeue();
A.Enqueue(6);
A.enqueue(7);
A.print();
system("pause");
return 0;
}
大写的Dequeue和Enqueue是反向出队入队。
给出I/O测试截图: