劍指offer 入棧 出棧正確性的判斷

2021-08-01 14:44:53 字數 1082 閱讀 3411

判斷元素出棧、 入棧順序的合法性。 如: 入棧的序列(

1,2,3,4,5

) , 出棧序列 是(

4,5,3,2,1

) 是合法序列, 入棧的序列(

1,2,3,4,5

) , 出棧序列為(

1,5,3,2,4

) 是不合法序列

我的解題思路:建立乙個輔助棧來模擬入棧與出棧過程,從而判斷其入棧、出棧順序是否合法。定義兩個陣列in與out分別儲存入棧序列與出棧序列,然後將入棧序列的第乙個元素壓入輔助棧,然後取棧頂元素,與出棧的第乙個元素進行比較,如果不相等,則繼續 講in中的後序元素壓入棧中,直到相等時,將輔助棧中元素pop,並且將出棧序列的後序元素進行比較。如果最後將出棧序列的元素已經比較完,並且輔助棧為空則出入棧合法。我用圖簡單分析一下過程。

用**實現:

bool islegal(int* in, int* out, int nlength)

if (s.top() != out[out_index])

break;

s.pop();

out_index++;

} if (out_index >= nlength && s.empty())

islegal = true;

} return islegal;

}

測試用例:

int main()

; int b = ;

int c = ;

int d = ;

cout << islegal(a, b, 5) << endl;

cout << islegal(a, c, 5) << endl;

cout << islegal(a, d, 5) << endl;

return 0;

}

測試結果為:

劍指Offer 數字出棧入棧

題目描述 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相...

棧 出棧序列正確性分析

問題很簡單 在棧的性質下,1 n的數字按順序入棧,給出它們的出棧序列,判定該序列是否合理。相比於之前遇到過的 求解所有可行出棧序列 本問題的複雜度著實降低了不少。不過要把這個過程正確地通過code模擬出來,在邏輯的處理上也需要注意不少細節。下面先來講講處理的方法 程式輸入 n以及給定的出棧序列,出棧...

劍指offer 判斷出棧順序是否正確

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...