1. 包含main函数的栈
class MinStack {
public:
stack<int> s;
stack<int> mmin;
MinStack() {
}
void push(int x) {
s.push(x);
if(mmin.size()==0||x<mmin.top())
{
mmin.push(x);
}
else
{
mmin.push(mmin.top());
}
}
void pop() {
if(!mmin.empty()&&!s.empty())
{
mmin.pop();
s.pop();
}
}
int top() {
if(!s.empty())
{
return s.top();
}
return 0;
}
int min() {
if(!mmin.empty())
{
return mmin.top();
}
return 0;
}
};
2. 用两个栈实现队列
class CQueue {
public:
CQueue() {
}
void appendTail(int value) {
s1.push(value);
}
int deleteHead() {
if(s2.empty())
{
while(!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
int val=-1;
if(!s2.empty())
{
val=s2.top();
s2.pop();
}
return val;
}
private:
stack<int> s1;
stack<int> s2;
};
3. 栈的压入、弹出序列
class Solution {
public:
bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
int i=0,j=0;
stack<int> s;
while(i < pushed.size() && j < popped.size())
{
if(pushed[i] == popped[j])
{
i++;
j++;
continue;
}
if(s.empty())
{
s.push(pushed[i++]);
}
else
{
int top=s.top();
if(top == popped[j])
{
s.pop();
j++;
continue;
}
s.push(pushed[i++]);
}
}
while(!s.empty())
{
if(s.top() == popped[j])
{
s.pop();
j++;
}
else
{
break;
}
}
return s.empty();
}
};