栈实现队列思想:一个栈表示入栈,另一个栈表示出栈。队列进入即在第一个栈入栈,出队列时,如果第二个栈有元素,那么将第二个栈第一个元素出栈,如果第二个栈没有元素,那么必须将第一个栈所有元素都出栈到第二个栈中,再从第二个栈中拿元素。
class MyQueue {
private:
stack<int> s1;
stack<int> s2;
public:
MyQueue() {}
void push(int x) { s1.push(x); }
int pop() {
if (s2.empty()) {
while (!s1.empty()) {
s2.push(s1.top());
s1.pop();
}
}
int t = s2.top();
s2.pop();
return t;
}
int peek() {
if (s2.empty()) {
while (!s1.empty()) {
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
}
bool empty() {
if (s1.empty() && s2.empty())
return true;
else
return false;
}
};
队列实现栈思想:用到一个队列,正常入队列,在出队列时,先将除了最后一个数据的其他元素一道队列后面。
class MyStack {
queue<int>p1;
public:
MyStack() {
}
void push(int x) {
p1.push(x);
}
int pop() {
int n=p1.size()-1;
while(n--)
{
p1.push(p1.front());
p1.pop();
}
int tmp=p1.front();
p1.pop();
return tmp;
}
int top() {
return p1.back();
}
bool empty() {
return p1.empty();
}
};