题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型
第一步:回顾栈和队列
栈:
size()
top() //返回值,不删除
pop() //删除
push()
empty()
队列:
size()
pop() //删除,不返回
push()
front() //返回头部,不删除
back() //返回尾部,不删除
Code:C++
//code-C++版:
class Solution
{
public:
void push(int node) {
//top() 返回值,不删除
//注意:值不只一个,数值全部入栈后,开始出栈
stack1.push(node);
}
int pop() {
int result;
if(stack1.empty() && stack2.empty()){
cout<<"empty!"<<endl;
return -1;
}
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.top());//node出栈1,入栈2
stack1.pop(); //栈1出栈,删除数据
}
}
//注意查询后,弹出
result = stack2.top();
stack2.pop();
return result;
}
private:
stack<int> stack1;
stack<int> stack2;
};
code:java
//code-java版本
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack1.empty()&&stack2.empty()){
throw new RuntimeException("Queue is empty!");
}
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
做题总结:
一、
C++版本和java版本有差异:
C++:pop() 弹出数据,无返回;一般用top()来做返回
java: pop() 弹出数据,有返回;没有top()函数
二、
在push()和pop()函数中,两个函数有同的功能。
刚开始我的代码是stack1用push()压入,而且随即弹出到stack2中
pop()中stack2则负责弹出,运行不通过后,仔细想想发现,数据不只有一个,而且按照这个代码,就没有实现队列的功能,还是栈的功能。
所以改变思路,push()中把stack1单纯输入,pop()中则将stack2开始从stack1里面弹出且压入stack2中,要注意条件判断,是否为空。