📄 新建 文本文档.txt
字号:
Ch03 Ex16
[Ch03 Ex16] 假设如题3.1所述火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)
等待调度,试编写算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使用
所有的软席车厢都被调整到硬席车厢之前。
提示:
1.本题目in_str代表顺序表,期中存放着入口处有n节硬席或软席车厢(分别以H和S表示),
而in_str.length代表车厢总数,其值等于n 。
2.算法思路是:
借用一个字符串rs,假设I代表进站操作,O代表出站操作,rs串最终结果是关于I和O组成的串。
遇到软席车厢(S),不得不先进站,再出站。rs串中应该有“IO”。
遇到硬席车厢(H),只进站不出站。rs串中应该有“I” 。
3. 举例
车厢序列: H S HHSS
那么rs串应该:IIOIIIOIOOOO
因此,本函数返回调者函数一个rs字符串。
void switchyard( char* rs, SqList in_str)
{ // 顺序表in_str中存有表示等待调度的车厢的字符序列。
// 以字符串 rs 返回表示调度操作的字符序列。
int i,k;
strcpy(rs,"\0"); //在rs串中,I代表进站,O代表出站
k = 0;
for( i=0; i<in_str.length; i++ )
if(in_str.elem[i]=='S')
{ strcat( rs ,"I"); //如果是软席车厢S,进站I,再出站O
strcat( rs ,"O");
}
else
{ strcat(rs ,"I"); //如果是硬席车厢H,只进站I
k++; //k记下站中硬席车厢的个数
}
while( k>0 ) { strcat( rs, "O"); //k>0,则站中硬席车厢出站O
k--;
}
}//switchyard
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -