【剑指Offer】【栈&队列】9_用两个栈实现一个队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
A:栈是先进后出的数据结构,队列是先进先出的数据结构。
入队push:直接压入栈1
出队pop:若栈2有元素,则取栈顶
若栈2无元素,将栈1的元素逐一压入栈2中,使得栈顶元素到了栈低,栈低元素到了栈顶,实现了队列的先进先出特性
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
//栈2为空
if(stack2.empty())
{
//压栈
while(!stack1.empty())
{
int tmp = stack1.top();
stack2.push(tmp);
stack1.pop();
}
}
//没有元素则删除失败
if(stack2.empty())
{
return -1;
}
int data = stack2.top();
stack2.pop();
return data;
}
private:
stack<int> stack1;
stack<int> stack2;
};

相关题目:
最小栈(实现一个最小栈,有三种操作,min:得到栈中的最小值,push:在栈顶插入一个元素,pop:弹出栈顶元素,使这三种操作的时间复杂度都是O(1))
构造队列
队列最小修改(已知一个奇怪的队列,这个队列中有n个数,初始状态时,顺序是1,2,3,4,…n,是1-n按顺序排列。这个队列只支持一种操作,就是把队列中的第i号元素提前到队首(1<i<=n),如有4个元素,初始为1,2,3,4,可以将3提前到队首,得到3,1,2,4 。 现在给出一个经过若干次操作之后的序列,请你找出这个序列至少是由原序列操作了多少次得到的。)

浙公网安备 33010602011771号