棧的push pop序列

2021-06-09 05:13:47 字數 1435 閱讀 8658

棧的push、pop序列

輸入兩個整數序列。其中乙個序列表示棧的push

順序,判斷另乙個序列有沒有可能是對應的

pop順序。為了簡單起見,我們假設

push

序列的任意兩個整數都是不相等的。比如輸入的push

序列是1、2

、3、4

、5,那麼4、5

、3、2

、1就有可能是乙個

pop系列。因為可以有如下的

push

和pop

序列:push 1

,push 2

,push 3

,push 4

,pop

,push 5

,pop

,pop

,pop

,pop

,這樣得到的

pop序列就是4、

5、3、

2、1。但序列4、

3、5、

1、2就不可能是

push序列1

、2、3

、4、5

的pop

序列。(尋找矛盾體)

分析:首先建立乙個輔助棧s,遍歷pop序列中的元素p(i)。

首先判斷輔助棧s是否為空,如果s為空,則在push序列中查詢p(i)的位置,此時一定可以在push序列中找到p(i),然後將push序列中在該位置之前的元素全部push到輔助棧中,並且將這些元素標記為已push,然後繼續遍歷pop序列。

如果s不為空,則比較棧頂元素和p(i)是否相等,如果相等則直接彈出,繼續遍歷pop序列;如果不相等則在push序列中查詢p(i)的位置,如果沒有查詢到,則說明不可能有這樣的pop序列,如果找到,則將push序列中在該位置之前的元素全部push到輔助棧中,並且將這些元素標記為已push,然後繼續遍歷pop序列。

**如下:

#include "stdafx.h"

#include "stdlib.h"

#include #include #include using namespace std;

//查詢元素在陣列指定起始範圍內的位置

int indexofpusharray(int *pusharray,int start,int n,int val)

index1=index2;

}} //s不為空時,在pusharray中查詢

else

//棧頂元素不等於poparray[i],繼續在pusharray中查詢

else

index1=index2;

}else //未查找到

return false;

}} }

return true;

}void main()

; int b1=;

int b2=;

cout

棧的push pop序列

題目 輸入兩個整數序列。其中乙個序列表示棧的push順序,判斷另乙個序列有沒有可能是對應的pop順序。為了簡單起見,我們假設push序列的任意兩個整數都是不相等的。比如輸入的push序列是1 2 3 4 5,那麼4 5 3 2 1就有可能是乙個pop系列。因為可以有如下的push和pop序列 pus...

棧的PUSH POP序列

輸入兩個整數序列,其中乙個表示棧的push順序,判斷另乙個序列有沒有可能是對應的pop序列。下面使用乙個棧來模擬這個操作過程,棧頂元素等於出棧序列中的元素時出棧,不等於時入棧。如果棧正常pop直到為空,說明序列是對應的pop序列返回真,否則返回假 1 pst 為已經初始化的棧 2 input為輸入棧...

29 棧的push,pop序列

題目 給定2個整數序列,其中1個是棧的push順序,判斷另乙個有沒有可能是對應的pop順序 解 其實這題主要是判斷進棧次數和出棧次數誓不是相等。我是用棧作的,效率不高,每乙個元素最多出棧1次,進棧1此,所以最多進行2n次操作,然後每次對棧頂元素和pb指標指向的元素進行比較 因為假設序列中整數都不相等...