程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 根據入棧順序判斷出棧順序的合法性,順序判斷合法性

根據入棧順序判斷出棧順序的合法性,順序判斷合法性

編輯:C++入門知識

根據入棧順序判斷出棧順序的合法性,順序判斷合法性


這道題不管是面試還是筆試的選擇題都非常愛出的一道題   題目描述: 輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,5,2,3,1就不可能是該壓棧序列的彈出序列。 輸入: 每個測試案例包括3行: 第一行為1個整數n(1<=n<=100000),表示序列的長度。 第二行包含n個整數,表示棧的壓入順序。 第三行包含n個整數,表示棧的彈出順序。 輸出: 對應每個測試案例,如果第二個序列是第一個序列的彈出序列輸出壓棧彈棧順序,否則輸出這不可能    
 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  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved