輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出序列。
假設壓入棧的所有數字均不相等。
例如:序列是某棧的壓棧序列,序列
是該壓棧序列對應的乙個彈出序列,但
就不可能是該壓棧序列的彈出序列。
解決該問題需要借助乙個輔助棧,把輸入的第乙個序列中的數字依次入棧,並按照第二個序列的順序依次從該棧中彈出數字。
判斷乙個序列是不是棧的彈出序列規律:
#include
#include
using namespace std;
bool ispoporder
(const int* ppush,
const int* ppop, int length)
else}if
(s.top()
!=*pnextpop)
break
; s.
pop();
pnextpop++;}
if(s.
empty()
&& pnextpush - ppush == length)
possible =
true
;return possible;
}
測試
int main()
; int b=
; int c=
; int size =
sizeof
(a)/
sizeof
(a[0])
;if(ispoporder
(a, b, size)
) cout <<
"yes"
<< endl;
else
cout <<
"no"
<< endl;if(
ispoporder
(a, c, size)
) cout <<
"yes"
<< endl;
else
cout <<
"no"
<< endl;
system
("pause");
return0;
}
輸出結果
yes
no
棧的壓入 彈出序列 c
棧的壓入 彈出序列 題目描述 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注...
棧的壓入彈出序列
題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。解答 可以用乙個輔助的棧來儲存入...
棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,判斷兩個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1 2 3 4 5是某棧的壓棧序列,序列4 5 3 2 1是該壓棧序列對應的乙個彈出序列,但4 3 5 1 2就不可能是該壓棧序列的彈出序列。bool ispoporder cons...