[Algo] 栈和队列
1. 栈实现队列
// 1. 栈实现队列
class MyQueue
{
private:
stack<int> in;
stack<int> out;
public:
void enQueue(int val)
{
in.push(val);
inToOut();
}
void deQueue()
{
out.pop();
inToOut();
}
int top()
{
if (empty()) return -1;
else return out.top();
}
bool empty()
{
return in.empty() && out.empty();
}
int size()
{
return in.size() + out.size();
}
private:
void inToOut()
{
// 条件1: out为空 条件2: in中全部元素
if (out.empty())
{
while (!in.empty())
{
out.push(in.top());
in.pop();
}
}
}
};
2. 队列实现栈
// 2. 队列实现栈
class MyStack
{
private:
queue<int> q;
public:
void push(int val)
{
q.push(val);
for (int i = 0; i < size() - 1; i++)
{
q.push(top());
q.pop();
}
}
void pop()
{
q.pop();
}
int top()
{
if (empty()) return -1;
else return q.front();
}
bool empty()
{
return q.empty();
}
int size()
{
return q.size();
}
};
3. 最小栈
// 3. 最小栈
class MinStack
{
private:
stack<int> s;
stack<int> min;
public:
void push(int val)
{
if (s.empty() || val <= min.top()) min.push(val);
else min.push(min.top());
s.push(val);
}
void pop()
{
s.pop();
min.pop();
}
int top()
{
if (s.empty()) return -1;
else return s.top();
}
int min()
{
if (min.empty()) return -1;
else return min.top();
}
bool empty()
{
return s.empty();
}
int size()
{
return s.size();
}
};