225. Implement Stack using Queues
解析
和这题差不多的Implement Queues using Stack.
solution:
class MyStack {
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
if(empty())
q.push(x);
else{
vector<int> temp;
while(!empty()){
temp.push_back(q.front());
q.pop();
}
int size = temp.size();
q.push(x);
for(int i=0;i<size;i++)
q.push(temp.at(i));
}
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int data = q.front();
q.pop();
return data;
}
/** Get the top element. */
int top() {
return q.front();
}
/** Returns whether the stack is empty. */
bool empty() {
return q.empty();
}
private:
queue<int> q;
};
C++
这题用了C++中STL里的stack和queue。stack和queue是怎么存储的呢?
通过debug,我猜测stack和queue是用数组存储。而且无论是stack,或queue,使用push到数组末尾。
但这样怎么保持stack后进先出和queue先进先出呢?
stack会保持一个top的变量,指向最后进的元素
queue会保持一个front的变量,指向最先进的元素
可能不是这样的,等我看了STL源码剖析