棧混洗的甄別

2021-10-07 15:25:30 字數 810 閱讀 1940

今天聽了鄧老師的慕課中的棧混洗的甄別,一開始看不懂在網上也找了很多帖子看,但是依然不太明白,後來自己想了一會覺得應該是對的,但是可能與鄧老師的方法不一樣(ps大神們見諒)。

考察三個棧a、b、s,其中b、s一開始為空,a中則存放我們要進行棧混洗的初始元素。

設a中的元素為棧混洗中只能進行s.push( a.pop() )彈出a中棧頂的元素並壓入s中,以及b.push( s.pop() )彈出s中的棧頂元素並壓入棧b。那麼上述兩次操作分別經過n次之後,棧a與s均可能為空,原來棧a中的元素全部轉移到b中。b稱為a的乙個棧混洗。

設b中的元素為b一共擁有

讓我們先來回顧一下棧混洗的基本操作:

(1)將a中的棧頂元素取出壓入s中,接下來有兩種選擇:

(2)將s中的棧頂元素取出壓入b中

(3)繼續將a中的棧頂元素取出壓入s中。

這裡b(待甄別)中的棧頂取出壓入b2中。也就是將b中的元素顛倒放入b2中。

可以將棧混洗的甄別過程過程描述為:

a.將a棧頂元素取出壓入s中

b.s中的棧頂b2中的棧頂比較

c.相同執行s.pop()、b2.pop(),返回b

d.不同返回a

最後s中的元素為空那麼認為b1是a的一種棧混洗。否則不是

怎麼理解上述過程呢?

首先a就是棧混洗中的(1)。如果說執行(2),那麼b中的此時的棧頂肯定等於s原來的棧頂,這就相當於是b2此時的棧頂等於s中的棧頂。這個時候可以認為我所要甄別的棧混洗是a棧混洗中的一種,所以可以執行b2.pop()、s.pop()。

如果執行(3),那麼相當於執行了d。

最後如果s中的元素為空那麼成功。

L2 032 彩虹瓶 棧混洗

題目鏈結 題目 彩虹瓶的製作過程 並不 是這樣的 先把一大批空瓶鋪放在裝填場地上,然後按照一定的順序將每種顏色的小球均勻撒到這批瓶子裡。假設彩虹瓶裡要按順序裝 n 種顏色的小球 不妨將順序就編號為 1 到 n 現在工廠裡有每種顏色的小球各一箱,工人需要一箱一箱地將小球從工廠裡搬到裝填場地。如果搬來的...

關於棧混洗出棧次序問題

void permutation stackbylistpermutationarray 並走另一條路徑。p data false 如果是第乙個位置,並且當前分支已經走過。if p isleft.first p data break 跳出迴圈 重置位置與各容器。p isleft.first obje...

結構體的大小甄別

記憶體對齊 各種資料存放的位址要能夠整除該資料本身的位元組數 例如 char可存放在任意位址,short存放在能被2整除的位址,int存放在能被4整除的位址 如何判斷結構體的大小 1 先將每個成員的位元組數寫出,然後從第二個成員開始,將前面成員的總位元組數補齊成當前位元組數的倍數 2 結構體的總大小...