剑指Offer_编程题
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
stack<int> stack1;
stack<int> stack2;
void push(int node) {
stack1.push(node);
}
int pop() {
int result;
//stack2倒转stack1中元素,生成“队列”
//在stack2为空时才进行倒转操作,否则顺寻被打乱
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.top());
stack1.pop();
}
}
result = stack2.top();
stack2.pop();
return result;
}
思路分析:
栈:后进、先出
队列:先进、先出
将栈二次倒转,之前“先进”的数据在第二次入栈时就变为了“后进”,此时再弹出栈顶元素就与队列相同
输入:1 2 3 4 5 6 7 8 9
队列:
栈:两次入栈
第二次入栈后,出栈顺序与队列相同:1 2 3 4 5 6 7 8
补充:使用标准库的栈和队列时, 应包含先关头文件.
1.栈:包含头文件: #include< stack >
定义: stack< int > s;
栈的基本操作
s.empty(); //如果栈为空则返回true, 否则返回false;
s.size(); //返回栈中元素的个数
s.top(); //返回栈顶元素, 但不删除该元素
s.pop(); //弹出栈顶元素, 但不返回其值
s.push(); //将元素压入栈顶
2.队列:包含头文件: #include< queue >
定义: queue< int > q;
q.empty(); //如果队列为空返回true, 否则返回false
q.size(); //返回队列中元素的个数
q.front(); //返回队首元素但不删除该元素
q.pop(); //弹出队首元素但不返回其值
q.push(); //将元素压入队列
q.back(); //返回队尾元素的值但不删除该元素