#include <iostream>
using namespace std;
const int SIZE = 50;
class Node
{
public:
Node()
{
pre = NULL;
next = NULL;
}
int value;
Node *pre;
Node *next;
};
class PQueue
{
public:
PQueue();
bool empty() const;
bool full() const;
void pop();
void push(int p);
int size() const;
Node *top();
void display();
private:
Node *front, *back;
int count;
};
PQueue::PQueue()
{
front = NULL;
back = NULL;
count = 0;
}
bool PQueue::empty() const
{
if (front == NULL)
return true;
else
return false;
}
void PQueue::pop()
{
if (empty())
cout << "队列为空!" << endl;
else if (count == 1)
{
front = NULL;
count--;
}
else
{
Node *p, *t;
p = top();
if (p == front)
{
t = front->next;
t->pre = NULL;
front = t;
}
else
{
p->pre->next = p->next;
p->next->pre = p->pre;
}
count--;
}
}
void PQueue::push(int p)
{
if (empty())
{
Node *newNode1 = new Node();
newNode1->value = p;
front = newNode1;
Node *newNode2 = new Node();
newNode2->pre = front;
back = newNode2;
front->next = newNode2;
count++;
}
else
{
Node *newNode = new Node();
back->value = p;
newNode->pre = back;
back->next = newNode;
back = newNode;
count++;
}
}
int PQueue::size() const
{
return count;
}
Node *PQueue::top()
{
Node *max = front;
Node *temp = front;
while (temp->next != NULL)
{
if (temp->value > max->value)
max = temp;
temp = temp->next;
}
return max;
}
void PQueue::display()
{
if (empty())
cout << "队列为空!" << endl;
else
{
int i = 0;
Node *temp = front;
while (temp->next != NULL)
{
if (i++ % 5 == 0)
cout << endl;
cout << temp->value << " ";
temp = temp->next;
}
cout << endl;
}
}
void main(void)
{
PQueue q;
int t;
cout << "选项:1.push;2.pop;3.display";
while (1)
{
cout << "请输入选项:" << endl;
cin >> t;
if (t == 1)
{
int temp;
printf("请输入数据:");
cin >> temp;
q.push(temp);
}
else if (t == 2)
{
q.pop();
}
else if (t == 3)
{
q.display();
}
else
cout << "请重新输入:" << endl;
}
}