棧的壓入 彈出序列

2021-08-01 16:18:27 字數 1076 閱讀 2156

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列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,說明棧中還有元素1,2,3。

這個時候如果繼續出棧,出棧元素應該為3。

但如果執行進棧,棧中元素變為1,2,3,5。然後再出棧的話出棧元素就是5。再執行三次出棧操作就是題中這種情況,所以4,5,3,2,1是

該壓棧序列對應的乙個彈出序列。

同樣,我們來看為什麼4,3,5,1,2就不可能是該壓棧序列的彈出序列呢

第乙個出棧元素為4,說明棧中還有元素1,2,3。

繼續出棧,出棧元素為3。棧中剩餘元素為1,2。然後5進棧,再出棧,棧中元素還是1,2。這時繼續出棧的話只可能是元素2出棧,不可能是1.所以4,3,5,1,2不可能是該壓棧序列的彈出序列。

總結:出棧元素只可能是與上乙個出棧元素緊鄰的仍在棧中的元素或者是後來又進棧的新元素。

該思路的**如下:

class solution 

for(int i= 0; i=0&&flag[iter-pushv.begin()] == 1) iter--; //找到與該元素緊鄰的仍在棧中的元素

if(popv[i+1] == *iter || find(pushv.begin(),pushv.end(),popv[i+1])> find(pushv.begin(),pushv.end(),value))

continue;//判斷下乙個出棧元素是否滿足之前提到的兩種情況

else

return false;

}return true;

}};

class solution       

}return stack.empty();

}};

棧的壓入彈出序列

題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列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...

棧的壓入彈出序列

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