C++ 双栈实现队列以及测试代码
用两个栈实现队列
http://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6
这一题比较简单,因为 stack 给了两个,而 list 是先进先出, stack 是先进后出,那样只要把两个栈在 push 和 pop 的时候倒来倒去就可以实现队列
class Solution
{
public:
void push(int node) {
// 先把 stack2 推入 stack1
while(!stack2.empty()){
stack1.push(stack2.top());
stack2.pop();
}
stack1.push(node);
}
int pop() {
// 先把 stack1 推入 stack2
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
int value = stack2.top();
stack2.pop();
return value;
}
private:
stack<int> stack1;
stack<int> stack2;
}; 一个比较简单的测试用例为:
TEST(LIST, StackList){
// 用栈实现队列
int values[] = {
1,2,3,4,5
};
Solution sol;
for(int val : values){
sol.push(val);
}
for(int value:values){
EXPECT_EQ(value, sol.pop());
}
}
深信服公司福利 726人发布

查看15道真题和解析