双栈模拟队列
2017-07-08 本文已影响70人
熊白白
编写一个类,只能用两个栈结构实现队列,支持队列的基本操作(push,pop)。
其实动手写一下,也很容易知道这个过程:
- 一个栈inS用于压入数据,另一个栈outS用于弹出数据
- 压入时直接压入
- 弹出时若栈不为空,则弹出;否则将inS中所有的值挨个弹出并压入outS中。然后从outS弹出元素。
class TwoStack {
public:
stack<int> inS,outS;
void push(int n){
inS.push(n);
}
int pop(){
if(outS.empty()){
while(!inS.empty()){
int t=inS.top();
inS.pop();
outS.push(t);
}
}
int t=outS.top();
outS.pop();
return t;
}
}
扩展:用两个队列模拟栈。
其实用一个队列就可以做到。那么:
- 压入时:压入到队列尾
- 弹出时:依次从队列头弹出元素,然后压入对尾。直至弹出原来处于队尾的元素。