一些stack基础tips
stack不提供访问功能,也不提供迭代器
stack底层为vector, deque(默认), list
Leetcode 232 Stack->queue
class MyQueue {
public:
stack<int> stkin;
stack<int> stkout;
MyQueue() {
}
void push(int x) {
stkin.push(x);
}
int pop() {
if(stkout.empty()){
while(!stkin.empty()){
stkout.push(stkin.top());
stkin.pop();
}
}
int res = stkout.top();
stkout.pop();
return res;
}
int peek() {
if(stkout.empty()){
while(!stkin.empty()){
stkout.push(stkin.top());
stkin.pop();
}
}
int res = stkout.top();
return res;
}
bool empty() {
if(stkin.empty() && stkout.empty())
return true;
return false;
}
};
改进:
int peek() {
int res = this->pop();
stkout.push(res);
return res;
}
Leetcode 225 Queue->stack
class MyStack {
public:
queue<int> que1;
queue<int> que2;
MyStack() {
}
void push(int x) {
que1.push(x);
}
int pop() {
int size = que1.size();
for(int i=0; i<size-1; i++){
que2.push(que1.front());
que1.pop();
}
int res = que1.front();
que1.pop();
while(!que2.empty()){
que1.push(que2.front());
que2.pop();
}
return res;
}
int top() {
return que1.back();
}
bool empty() {
if(que1.empty())
return true;
return false;
}
};
改进(只用一个 queue)
class MyStack {
public:
queue<int> que1;
queue<int> que2;
int top_val = 0;
MyStack() {
}
void push(int x) {
que1.push(x);
top_val = x;
}
int pop() {
int size = que1.size();
for(int i=0; i<size-2; i++){
que1.push(que1.front());
que1.pop();
}
top_val = que1.front();
que1.push(top_val);
que1.pop();
int res = que1.front();
que1.pop();
return res;
}
int top() {
return top_val;
}
bool empty() {
if(que1.empty())
return true;
return false;
}
};