已知一個棧的入棧序列,判斷給定的一個序列是否為其出棧序列
阿新 • • 發佈:2019-01-30
思路:
(1)棧為後入先出序列
(2)將入棧序列的元素一個一個入棧然後和出序列中每個元素比較。取序列第一個元素時,把第一個序列的各個元素依次入棧,然後入棧一個後和序列元素比較,如果相同那麼將這個元素出棧,並且與序列的第二個元素再進行比較
bool IspopOrder(vector<int> pushv,vector<int> popv) { bool isPop=false; if(popv.size()>0&&pushv.size()&&popv.size()==pushv.size()) { std::stack<int> stackdata; int i=j=0; int length=pushv.size(); while(j<length) { while(stack.empty()||stack.top()!=popv[j]) { if(i>length-1) break; stack.push(pushv[i]); i++; } if(stack.top()!=popv[j])//對於這個元素在入棧序列的頂部找不到時,證明這個序列不可能為出棧序列 break; //當棧頂的元素等於出棧序列中對應的元素時,證明這個元素可以在這個位置出棧,此時繼續觀察下一個元素,領j++ stack.pop(); j++ } if(stack.empty()&&j==length)//當所有棧裡的元素彈出且j等於出棧序列元素數時,證明這個序列是一個合法的出棧序列 isPop=true; } return isPop; }