利用栈c++假设火车调度n节硬席H或软席S,输出调度操作序列,使所有软席在硬席之前
时间: 2024-05-21 17:10:30 浏览: 94
算法思路:
1. 定义两个栈:一个用于存放硬座车厢,一个用于存放软座车厢。
2. 依次读入车厢,如果是硬座车厢,则直接入栈1;如果是软座车厢,先将栈1中的所有车厢弹出并压入栈2,然后再将该软座车厢入栈2。
3. 最后,依次将栈2中的所有车厢弹出并输出,再依次将栈1中的所有车厢弹出并输出,即可得到操作序列。
C++ 代码实现:
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<char> s1, s2; //定义两个栈
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
char c;
cin >> c;
if (c == 'H') //如果是硬座车厢
{
s1.push(c);
}
else //如果是软座车厢
{
while (!s1.empty()) //将栈1中的所有车厢弹出并压入栈2
{
s2.push(s1.top());
s1.pop();
}
s2.push(c); //将该软座车厢入栈2
}
}
while (!s2.empty()) //依次将栈2中的所有车厢弹出并输出
{
cout << s2.top() << " ";
s2.pop();
}
while (!s1.empty()) //依次将栈1中的所有车厢弹出并输出
{
cout << s1.top() << " ";
s1.pop();
}
return 0;
}
阅读全文