100題 第二十九 棧的push pop序列

2021-08-26 20:05:25 字數 1222 閱讀 6861

一,題目:輸入兩個整數序列。其中乙個序列表示棧的push順序,判斷另乙個序列有沒有可能是對應的pop順序。

如果我們希望pop的數字正好是棧頂數字,直接pop出棧即可;

如果希望pop的數字目前不在棧頂,我們就到push序列中還沒有被push到棧裡的數字中去搜尋這個數字,並把在它之前的所有數字都push進棧。

如果所有的數字都被push進棧仍然沒有找到這個數字,表明該序列不可能是乙個pop序列。

其實這是乙個計算機考研時經常遇到的一道選擇題,題目給定乙個壓棧序列,然後找出選項中哪乙個一定不是可能的出棧序列。

二,分析

例如輸入順序為1 2 3 4 5不可能輸出順序為: <1 4

23 5> <4 2 3 5 1 > <1 5 2 3 4 > <3 4 1 2 5>……

可能輸出順序為: <1 2 3 4 5 ><5 4 3 2 1 ><2 1 3 4 5> <3 2 1 5 4 >……

如何判定輸出順序<1 4 2 3 5 >為不可能順序?

新建乙個棧m_stack push= pop=

第一輪 m_stack.push(push[0]); pop[0]=m_stack.top--->m_stack.pop;

第二輪 m_stack.push(push[1]); pop[1]!=m_stack.top--->m_stack.push[2] m_stack.push[3] ----pop[1]=m_stack.top--->m_stack.pop

第三輪 m_stack.push[4]; pop[2]!=m_stack.top ---->push 中沒有全部pop出來 所以不是正確的輸出序列

三,原始碼

#include#includeconst int size=5; //定義長度  

using namespace std;

bool judge(int spush,int spop)

ipush++;

} if(ipop==size)

return true;

else

return false;

} int main(void)

; int spop[size]=;

if(judge(spush,spop))

cout<<"yes"

return 0;

}

LeetCode第二十九題 整數除法

問題簡介 給定兩個整數被除數和除數,運算過程中不使用乘法,除法和模運算子,返回商,dividend是被除數,divisor是除數.注 1.被除數和除數都是32位有符號整數 2.除數永遠不會為0 3.假設我們正在處理乙個只能在32位有符號整數範圍內儲存整數的環境 231,231 1 出於此問題的目的假...

第二十九天

字元陣列和字元指標不是一回事 1字元陣列由若干個元素組成,每個元素中放乙個字元,而字元指標變數中存放的是位址 字串第乙個字元的位址 決不是將字串放到字元指標變數中。2賦值方法不同,對字元陣列只能對各個元素賦值,不能用以下辦法對字元陣列賦值。char str 20 str miao 字元指標變數,可以...

long除法 LeetCode第二十九題 整數除法

divide two integers 問題簡介 給定兩個整數被除數和除數,運算過程中不使用乘法,除法和模運算子,返回商,dividend是被除數,divisor是除數.注 1.被除數和除數都是32位有符號整數 2.除數永遠不會為0 3.假設我們正在處理乙個只能在32位有符號整數範圍內儲存整數的環境...