29 棧的push,pop序列

2022-03-24 12:47:01 字數 978 閱讀 1510

題目:給定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為輸入棧...