1060 合法棧輸出

2021-10-09 15:12:57 字數 1058 閱讀 5022

本題是一道模擬題,模擬資料進棧與出棧的順序,本題需要解決兩個子問題

第乙個問題:用什麼的儲存結構模擬進棧與出棧

首先進棧可以用乙個佇列a和棧b來模擬即a佇列的首元素進b棧後便刪除a的佇列的首元素;佇列c模擬出棧的順序即b棧出乙個資料進c佇列,如圖所示為模擬情況

第二個問題:如何遍歷所有的進棧出棧情況呢

用dfs(遞迴)和回溯法來遍歷所有的進棧出棧情況,具體如下:如上圖在a佇列的資料1向b棧輸入後,這個資料有兩種選擇:選擇一,直接出棧進入c佇列;選擇二,繼續留在b棧裡(這樣的選擇順序保證了公升序排列);輸入的每個資料都如上述的1一樣有兩種選擇:出棧進佇列c或繼續留在b棧。(在寫dfs用回溯法即記錄資料做出第乙個選擇出棧進佇列c前的狀態)遞迴出口為:c佇列的大小為n時,輸出c佇列的所有資料即出棧順序

合法棧輸出

既然要求合法棧輸出,那就用棧作為中間容器來進行操作用佇列來儲存輸入和輸出的資料,輸出的結果自然會滿足題目要求。主要部分是遞迴和分類,每遞迴一次可以有兩種選擇 1,中間棧將乙個資料轉移至輸出佇列中 2,中間棧資料不動,將輸入佇列中的乙個資料轉移至中間棧中。為了使三個容器在一次遞迴中可以將以上兩種操作都...

合肥工業大學oj 1060 合法棧輸出

其實就是乙個深度優先搜尋,題目的規則就是在某乙個時間你可以選擇執行入棧或出棧,出棧所組成的這些序列就是合法的棧輸出 include includeusing namespace std int n void dfs int,int,string,stack 深度優先搜尋,通過這種方式,可以自然而然地...

判斷棧的輸出序列是否合法

乙個最多可以儲存m個數的棧 按1,2,3.順序入棧並隨機出棧 輸入乙個出棧序列,判斷給出 出棧序列是否合理乙個棧 按序入棧 乙個數 判斷棧的大小是否超出要求 乙個flag 標誌該序列是否合理 include include using namespace std const int maxn 101...