理论基础:
stack是一种先进后出的数据结构只有一个出口,stack不允许有遍历行为。
以deque为底部结构并且封闭其头端开口,就可以形成一个stack,栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的。这种被归类为adapter(配接器)
queue是一种先进先出的数据结构具有两个出口,queue不允许有遍历行为。
同样的queue以deque为底部结构,封闭其底端出口和前端入口。queue被归类为adapter(配接器)。
232.用栈实现队列
使用栈来模式队列的行为,需要两个栈一个输入栈,一个输出栈。
class MyQueue {
stack<int> stackIn;
stack<int> stackOut;
public:
MyQueue() {
}
void push(int x) {
stackIn.push(x);
}
int pop() {
if(stackOut.empty()){
while(!stackIn.empty()){
stackOut.push(stackIn.top());
stackIn.pop();
}
}
int result = stackOut.top();
stackOut.pop();
return result;
}
int peek() {
int res = this->pop();
stackOut.push(res);
return res;
}
bool empty() {
return stackIn.empty() && stackOut.empty();
}
};
225. 用队列实现栈
实现比较简单,pop()要求移除并且返回栈顶元素。在模拟的时候将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时在去弹出元素就是栈的顺序。
class MyStack {
public:
queue<int> que;
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
int size = que.size();
size--;
while (size--) {
que.push(que.front());
que.pop();
}
int result = que.front();
que.pop();
return result;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};