棧的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指標指向的元素進行比較 因為假設序列中整數都不相等...