//Implement a MyQueue class which implements a queue using two stacks.
struct StackNode{
int value;
StackNode * next;
StackNode(int v)
{
value = v;
next = NULL;
}
};
class Stack
{
private:
StackNode * head;
public:
Stack()
{
head = NULL;
}
~Stack()
{
while (head != NULL)
{
StackNode * node = head;
head = head->next;
delete node;
}
head = NULL;
}
void push(int value)
{
StackNode * node = new StackNode(value);
if (head == NULL)
head = node;
else
{
node->next = head;
head = node;
}
}
int pop()
{
if (head == NULL)
{
cout<<"error"<<endl;
return -1;
}
StackNode * node = head;
int value = node->value;
head = head->next;
delete node;
return value;
}
int top()
{
if (head != NULL)
return head->value;
else
{
cout<<"NULL"<<endl;
return -1;
}
}
bool isEmpty()
{
return head == NULL;
}
};
class MyQueue
{
private:
Stack main;
Stack extra;
public:
MyQueue()
{
}
~MyQueue()
{
}
void add(int value)
{
main.push(value);
}
int remove()
{
if (!extra.isEmpty())
{
return extra.pop();
}
while (!main.isEmpty())
{
int value = main.pop();
extra.push(value);
}
return extra.pop();
}
int top()
{
if (!main.isEmpty())
return main.top();
while (!extra.isEmpty())
{
int value = extra.pop();
main.push(value);
}
return main.top();
}
bool isEmpty()
{
return main.isEmpty() && extra.isEmpty();
}
}
这里使用两个栈,其中main栈里面一定是倒序的,后面的数在top,而extra里面的正序,先加入的数在top,所以删除的时候,一定是先删extra里面的数。