棧的壓入 彈出序列

2021-08-16 16:51:12 字數 1032 閱讀 4750

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

分析:我的思想是不借助輔助棧的,彈出序列的第乙個元素,在壓入序列中找到這個元素的位置n,那麼壓入棧中的前n個元素,在彈出序列裡應該是倒序排列的,就這乙個基本思想。如果第乙個滿足,那麼就在彈出序列和壓入序列中同時刪掉這個元素,重複這個步驟直到序列為空,如果都滿足,就是相應的彈出序列,否則就不是。

還有一種輔助棧的思想,這種思路是真的簡單,**幾行就寫完了,自嘆不如。宣告乙個棧,然後比較壓入序列和彈出序列的第乙個元素,不相同就把壓入序列的第乙個元素壓棧,然後比較壓入序列的第二個元素與彈出序列的第乙個元素,如果相同就兩個序列都彈出,繼續比較。程式執行結束,也就是比較到序列的末尾,如果輔助棧為空,就是相應的彈出序列,否則就不是。

不借助輔助棧的**:

class solution

if(i==pushv)

return false;

pushc.clear();

pushc.insert(pushc.begin(), pushv.begin(), pos);

pushv.erase(pos);

popv.erase(popv.begin());

if (!hasorder(pushc, popv))

return false;}}

bool hasorder(vectorpushc, vectorpopc)

}return false;}};

借助輔助棧的思想:

class solution

}

returnstack.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...