程序员修炼-剑指offer之用两个栈实现队列
发表时间:2020-10-19
发布人:葵宇科技
浏览次数:64
之前写过一遍栈的实现,今天说说怎么用栈实现队列的功能
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
首先做题前明确思路,再动手码代码。
1.队列是先进先出,而栈是先进后出
2.实现队列就是实现队列的两个操作,入队和出队
使用两个栈stack1和stack2,stack1模拟入队,stack2模拟出队
操作思路如下:
1.入队操作,直接将数据压入stack1栈即可。
void push(int node) {
stack1.push(node);
}
2.出队操作,若stack2不为空,直接弹出栈顶元素,若不为空,将stack1所有元素弹入stack2之后,再弹出stack2栈顶元素。
这里稍稍要思考的一个地方就是,当stack2为空时的操作思路,因为队列是先进先出的,往stack2里面放元素时,需要把stack1最先进入的元素最后放,这样它就在栈顶了,就满足先进先出的原则了,想通这一点就很好写代码了
int pop() {
int a;//用一个元素保存stack1弹出的元素
if(stack2.empty())
{//stack2为空时,依次把stack1的栈顶元素压入stack2
while(!stack1.empty())
{
a = stack1.top();
stack2.push(a);
stack1.pop();
}
}
//stack2不为空,则直接弹出栈顶元素
a = stack2.top();
stack2.pop();
return a;
}
图解该过程,这三句代码的作用如下,元素的位置发生了改变,最先进入的元素1,变成了栈顶元素,满足了先进先出原则