合法的出栈序列
题目:
已知从1至n的数字序列,按顺序入栈,每个数字入栈后即可出栈, 也可在栈中停留,等待后面的数字入栈出栈后,该数字再出栈,求该数字序列 的出栈序列是否合法?
思路图解: 使用栈与队列模拟入栈、出栈过程
题解代码:
// 合法的出栈序列.cpp
#include <iostream>
#include<stack>
#include<queue>
using namespace std;
//声明函数
bool check_stack(queue<int> &q) {
//声明一个栈s
stack<int> s;
int n = q.size();
for (int i = 1; i <= n; i++)
{
//按顺序入栈
s.push(i);
while (!s.empty()&&q.front()==s.top())
{
s.pop();
q.pop();
}
}
//如果s不为空就是不合法的
if (!s.empty())
{
return false;
}
return true;
}
int main()
{
//模拟数据 例:3 5 4 2 1
queue<int> q;
q.push(3);
q.push(5);
q.push(4);
q.push(2);
q.push(1);
if (check_stack(q)) {
cout << "合法的" << endl;
}
else {
cout << "不合法" << endl;
}
}