題目:給定2個整數序列,其中1個是棧的push順序,判斷另乙個有沒有可能是對應的pop順序
解:其實這題主要是判斷進棧次數和出棧次數誓不是相等。我是用棧作的,效率不高,每乙個元素最多出棧1次,進棧1此,所以最多進行2n次操作,然後每次對棧頂元素和pb指標指向的元素進行比較(因為假設序列中整數都不相等)
**:
/*判斷棧push和pop順序是否符合
push中的元素順序入棧,如果等於pb指向的元素,那麼迴圈出棧,知道棧空或者pb元素和棧頂元素不一樣,如果一樣,出棧且pb++,總共的入棧出棧次數最多是2*n次 */
#include
using
namespace
std;
#define max 50typedef
struct
stack;
stack* create_stack(void
)bool empty_stack(stack*s)
bool full_stack(stack*s)
void push_stack(stack* s,int
value)
int pop_stack(stack*s)
int get_stack(stack*s)
void free_stack(stack*s)
}bool satisfy(int *a,int *b,int
n)
while(!empty_stack(s) && get_stack(s)==b[pb])
}bool
flag;
if(empty_stack(s) && pb==n)
flag=true
;
else
flag=false
; free_stack(s);
return
flag;
}int main(void
)
棧的push pop序列
棧的push pop序列 輸入兩個整數序列。其中乙個序列表示棧的push 順序,判斷另乙個序列有沒有可能是對應的 pop順序。為了簡單起見,我們假設 push 序列的任意兩個整數都是不相等的。比如輸入的push 序列是1 2 3 4 5,那麼4 5 3 2 1就有可能是乙個 pop系列。因為可以有如...
棧的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為輸入棧...