判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列
程序员文章站
2022-07-04 10:30:09
...
该题依旧考察的是栈的先进后出原则
思路如图
出栈时候先判断S2是否为空,不为空则从S2栈顶元素逐个取出,再从S1中取出剩下的元素
代码实现如下
#include<iostream>
#include <assert.h>
#include <stack>
using namespace std;
typedef int T;
class Stack
{
public:
Stack()
{}
~Stack()
{}
void Push(T data)
{
s1.push(data);
}
void Pop()
{
while (!s2.empty())
{
cout << "s2.pop(" << s2.top() << ")" << endl;
s2.pop();
}
if (!s1.empty())
{
cout << "s1.pop(" << s1.top() << ")" << endl;
s1.pop();
}
}
void NumReverse(int x)
{
if (x > s1.size() && x < 0)
return;
while (x)
{
T temp = s1.top();
if (!s1.empty())
{
s1.pop();
s2.push(temp);
}
--x;
}
}
private:
stack<T> s1;
stack<T> s2;
};
int main()
{
Stack s;
s.Push(1);
s.Push(2);
s.Push(3);
s.Push(4);
s.Push(5);
s.NumReverse(2);
s.Pop();
s.Pop();
s.Pop();
s.Pop();
system("pause");
return 0;
}
下一篇: 上海景点排行榜 上海最好玩的旅游景点