既然要求合法棧輸出,那就用棧作為中間容器來進行操作用佇列來儲存輸入和輸出的資料,輸出的結果自然會滿足題目要求。
主要部分是遞迴和分類,每遞迴一次可以有兩種選擇:
1,中間棧將乙個資料轉移至輸出佇列中;
2,中間棧資料不動,將輸入佇列中的乙個資料轉移至中間棧中。
為了使三個容器在一次遞迴中可以將以上兩種操作都進行,每次遞迴要對三個容器的進行複製,然後用本體和複製體分別執行操作一和操作二。
#include
#include
#include
using
namespace std;
int n;
void
output
(queue<
int> inqueue, stack<
int> sta, queue<
int> outqueue)
cout << endl;
return;}
if(outqueue.
size()
== n)
cout << endl;
return;}
queue<
int> inqcopy = inqueue;
stack<
int> stcopy = sta;
queue<
int> outcopy = outqueue;if(
!stcopy.
empty()
)//第一種選擇,將棧中的乙個資料移到輸出佇列中if(
!inqueue.
empty()
)//第二種選擇,不動棧中已有的資料,將輸入佇列中的乙個資料移到棧中
return;}
intmain()
output
(inqueue, sta, outqueue)
;return0;
}
輸入輸出資訊:
1060 合法棧輸出
本題是一道模擬題,模擬資料進棧與出棧的順序,本題需要解決兩個子問題 第乙個問題 用什麼的儲存結構模擬進棧與出棧 首先進棧可以用乙個佇列a和棧b來模擬即a佇列的首元素進b棧後便刪除a的佇列的首元素 佇列c模擬出棧的順序即b棧出乙個資料進c佇列,如圖所示為模擬情況 第二個問題 如何遍歷所有的進棧出棧情況...
判斷棧的輸出序列是否合法
乙個最多可以儲存m個數的棧 按1,2,3.順序入棧並隨機出棧 輸入乙個出棧序列,判斷給出 出棧序列是否合理乙個棧 按序入棧 乙個數 判斷棧的大小是否超出要求 乙個flag 標誌該序列是否合理 include include using namespace std const int maxn 101...
合法入棧順序
題目描述 我們知道,乙個入棧序列是的合法出棧序列有,等,而是不合法的.現在冰語有乙個長度為n的序列a 保證序列內數字唯一,且1 a i n 他想知道這個序列是不是入棧順序的合法出棧序列,你能告訴他麼?輸入 第一行為t,表示樣例個數 每個樣例第一行為n,第二行為n個數 1 t 1e4,3 n 100 ...