1 string Judge(int n_values, int input [],int output[]) 2 { 3 assert(input && output && n_values > 0); 4 Stack<int ,100> s1; 5 string result; 6 s1.Push( input[0]);//為了防止數組越界訪問造成崩潰,先將第一個數壓棧開辟好數組空間 7 result.append(1, 'R');//因為有入棧操作 8 int out = 0; 9 int in = 1;//因為有入棧操作,所以入棧數組計數加1 10 while (out < n_values )//循環結束條件是完美的匹配了出棧順序,出棧計數到達出棧數組末尾 11 { 12 if (in > n_values )//如果入棧計數先到達入棧數組末尾,證明沒有數可以再入棧,但此時出棧數組還沒走完,說明這個出棧順序根本不可能完成 13 { 14 result = "這不可能!" ; 15 return result; 16 } 17 if (s1.Top() == output [out]) 18 { 19 s1.Pop();//當前棧頂元素恰好和出棧順序的一樣,趕緊出棧 20 result.append(1, 'C'); 21 out++; 22 } 23 else 24 { 25 s1.Push( input[in]);//棧頂元素和出棧數組的當前指向不一致,只能繼續入棧 26 result.append(1, 'R'); 27 in++; 28 } 29 } 30 return result; 31 } 32