理论基础
首先大家要知道 栈和队列是STL(C++标准库)里面的两个数据结构。
栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,所以栈不提供走访功能,也不提供迭代器(iterator)。 不像是set 或者map 提供迭代器iterator来遍历所有元素。
第一问的答案 所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)
4 不提供
3 可以由什么实现
我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构。
deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了。
用栈实现队列
用栈模拟队列的话,得用两个栈
首先要明确这个队列的一些个操作
代码
class MyQueue {
public:
stack<int>one;
stack<int>two;
MyQueue() {
}
void push(int x) {
one.push(x);
}
int pop() {
if (two.empty()){
while(!one.empty()){
two.push(one.top());
one.pop();
}
}
int result=two.top();
two.pop();
return result;
}
int peek() {
int res =this->pop();
two.push(res);
return res;
}
bool empty() {
return one。empty()&&two.empty();
}
};
一些个问题啊
建议
这个的STL就是为这个数据结构而发明的,建议是先做题,然后遇到相应的STL再去单独研究
想了解STL的可以看我写的这篇文章