新建 文本文档.txt

来自「Ch03 Ex16 [Ch03 Ex16] 假设如题3.1所述火车调度站的入」· 文本 代码 · 共 40 行

TXT
40
字号
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 + =
减小字号Ctrl + -
显示快捷键?