棧的合法序列是就是通過一定次序的入棧,出棧後,能夠得到的有順序的一串數,
比如說,我們將12345這五個數按照一定的入棧出棧順序進行出入棧,可以得到12345,54321
45321等序列。
啦啦啦,重點來啦!我們不如就拿45321來舉例子吧
首先我們把45321這個序列存到乙個棧 s 裡面去,在宣告乙個新的棧 s1 用來臨時儲存需要先入棧的數字。
1.我們把 a = 4 拿出來,與 k= 1 比較,發現 4 是大於 1 的, 所以我們把 n = 1 入棧,再把 n++, 得到 2 ,2 還是小於 4 的,我們繼續入棧,直到 4 ,
2.這時候我們把 4 出棧,再把 k++, 得到5,這時候 n = 5,k++, s 出棧.
3.此時 k = 6 大於n,那麼我們 s1 裡面剩下的元素必須得按 filo 的順序乙個乙個出棧了,這樣我們再用乙個while 進行按段一下就 ok 啦。啦啦啦。
因為是資料結構的實驗,所以直接使用了實驗時用的函式,沒有用 stl,所以肯定是編譯不了的,就貼一下核心**啦。
void judgelegal(node *s, int n) else
if (a != k)
}while ( popstack(s1, k)) else
}cout << "yes"
<< endl;
}
判斷乙個序列是否為合法序列
1.1 問題描述 假設以1 和0 分別表示入棧和出棧操作。棧的初態和終態均為空,入棧和出棧的操作序列可表示為僅由1 和0 組成的序列,稱可以操作的序列為合法序列,否則稱為非法序列。寫出乙個演算法,判定所給的操作序列是否合法。若合法,返回1,否則返回0。輸入序列的長度不超過30個操作 1.2 輸入形式...
判斷乙個序列是否是棧的彈出序列
學習過在資料結構的人肯定遇到過很多這種題目 比如給定乙個序列 如 1 2 3 4 5的入棧序列 問 4 5 3 2 1是不是前者的乙個出棧序列首先看 出棧序列 4 5 3 2 1 第乙個元素是4 也就是說入棧時 必須要先找到4 然後出棧在繼續找 5 可以用乙個棧來儲存當前的入棧元素 步驟 操作 棧中...
判斷出棧序列是否合法
問題描述 對於乙個棧,已知元素的進棧序列,判斷乙個由棧中所有元素組成的排列是否是可能的出棧序列。比如,進棧序列為1 2 3 4,則可能的出棧序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。輸入形式 從標準輸入讀取第一行是乙個整數n 3 n 10 代表有n個元素,其進棧序列是1 2 3...