1,用两个栈实现队列
2,用两个队列实现栈
栈->队列
思路:入队时,直接往stack1压入元素;
出队时,判断stack2是否有元素,有则直接弹出栈顶元素,没有则将stack1中的元素一一压入stack2,再弹出stack2的栈顶元素。
class MyQueue {
public:
stack<int> stack1;
stack<int> stack2;
MyQueue() {
// do intialization if necessary
}
void push(int element) {
// write your code here
stack1.push(element);
}
int pop() {
// write your code here
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
int ret = stack2.top();
stack2.pop();
return ret;
}
else
{
int ret = stack2.top();
stack2.pop();
return ret;
}
}
int top() {
// write your code here
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
return stack2.top();
}
else
return stack2.top();
}
};
队列->栈
思路:有两个队列,一个用来进出栈的,另一个是中转站。
入栈时,直接往queue1放进元素;
出栈时,先将queue1中前count-1个元素依次放进queue2,然后将最后一个元素出队列。
class MyStack {
public:
queue<int> queue1;
queue<int> queue2;
MyStack() {
// do intialization if necessary
}
void push(int element) {
// write your code here
queue *pushtmp;
if(!IsQueueEmpty(queue1))
{
pushtmp = queue1;
}
else
{
pushtmp = queue2;
}
EnQueue(pushtmp, element);
}
int pop() {
// write your code here
int ret;
queue* pushtmp;
queue* tmp;
if(!IsQueueEmpty(queue1))
{
pushtmp = queue1;
tmp = queue2;
}
else
{
pushtmp = queue2;
tmp = queue1;
}
if(IsQueueEmpty(pushtmp))
{
cout<<stack is empty<<endl;
}
while(SizeOfQueue(pushtmp)!=1)
{
EnQueue(tmp,DeQueue(pushtmp));
}
ret = DeQueue(pushtmp);
return ret;
}