17 7 20 元素入棧出棧的合法性檢測

2021-08-04 01:12:17 字數 1514 閱讀 8397

題目描述:

元素出棧、入棧順序的合法性。如:入棧的序列(1,2,3,4,5),出棧序列為(4,5,3,2,1),則合法。

入棧的序列(1,2,3,4,5),出棧序列為(4,5,2,3,1),則不合法。

難點分析:

在出棧、入棧操作隨機性比較強,不好把握它們的動態變換。

但是,要牢記棧的性質「後進先出」。第乙個出棧的元素,肯定是當時棧空間中元素中最後進入的。即使,後來又有新的元素入棧,但是我們知道它們的入棧順序,和出棧順序,就可以模擬出,當時元素入棧、出棧的情況。

思路:

可以利用乙個輔助的棧空間。

1,把第乙個序列v1中的數字逐個壓入棧中,壓入的過程中把第二個序列v2中元素與棧首元素比較。

2,如果相同,則出棧,同時,v2下標往後移,準備進行下一次比較。

3,如果不同,則將v1中資料依次入棧,直到滿足1中的條件或者沒有資料為止。

實現**:

#include 

#include

#include

using

namespace

std;

template

bool check_out_stack_order(const

vector

& v_1, const

vector

v_2)

//此時,s.top()=v_2[index_2],說明原棧此處有出棧操作,得到v_2中的v_2[index]。

s.pop();

++index_2;

}if (s.empty())

return

true;

else

return

false;

}

實驗例項:

int main()

; vector

v2 = ;

vector

v3 = ;

cout

<< "v1 與 v2是否滿足出棧、入棧的合法性?";

if (check_out_stack_order(v1, v2))

cout

<< " 滿足"

<< endl;

else

cout

<< "不滿足"

<< endl;

cout

<< "v1 與 v3是否滿足出棧、入棧的合法性?";

if (check_out_stack_order(v1, v3))

cout

<< " 滿足"

<< endl;

else

cout

<< "不滿足"

<< endl;

system("pause");

return

0;}

元素出棧 入棧順序的合法性

元素出棧 入棧順序的合法性。如入棧的序列 1,2,3,4,5 出棧序列為 4,5,3,2,1 很直觀的一種想法,建立乙個輔助棧,把輸入的第乙個序列中的數字一次壓入該輔助棧,並按照第二個序列的順序從該棧中彈出數字。遍歷出棧順序中的元素,有兩種情況 1 如果元素是棧頂的元素,則pop出來 2 如果不是棧...

元素出棧 入棧順序的合法性。

1.基礎題 元素出棧 入棧順序的合法性。如 入棧的序列 1,2,3,4,5 出棧序列為 4,5,3,2,1 則合法。入棧的序列 1,2,3,4,5 出棧序列為 4,5,2,3,1 則不合法。include include include using namespace std input為入棧序列,...

元素出棧 入棧順序的合法性

問題描述 判斷元素出棧 入棧順序的合法性。如入棧的序列 abcde 出棧序列為 deabc 思路 定義兩個陣列分別來存放入棧和出棧序列 步驟1 先將字串1的第乙個字元入棧 步驟2 將該元素與字串2的第乙個元素進行比較 步驟3 a 如果相等,就將該元素出棧並且將字串1的下乙個字元入棧,與字串2的下乙個...