分析:本題第一反應便是無從下手。同時通過不斷在紙上模擬,會自然地想到回溯這方面去。但是怎麼回,確實乙個問題。
n個元素是依次進去棧的。即只有將第i個元素進棧,第i+1個元素才會執行進棧操作。
我們可以想到,在第i個元素進棧後,每一步操作,有且只有兩種情況:第一種第i+1個元素進棧。第二種第i個元素出棧(同樣在第i個元素出棧後,也有且只有兩種可能:第一種第i+1個元素進棧。第二種,第i-1個元素出棧)。
同時,注意,出棧操作執行的前提是棧裡面必須有元素(即s.top>=0),否則,只能執行進棧操作。
分析至此,大體思路已明確。不過具體實施,卻仍有一定的困難。
我們需要儲存每一次出棧的操作。並且,在沒有元素能夠進棧的時候(即所有元素都已進過棧),輸出之前儲存的出棧序列。
故,我們可以利用乙個prestack陣列來儲存每一次出棧的元素。
具體**如下:
#include"stdio.h"
#include"string.h"
//sqstack這是個棧的結構
typedef struct
sqstack;
/*定義一下全域性變數,乙個棧變數s,乙個n(表示有多少個元素)*/
/*original陣列(儲存要處理的n個元素)*/
/*prestack陣列(儲存每一次出棧的元素)*/
/*count 是我為了統計有多少種進出棧的可能性而定義的*/
sqstack s;
int n;
int original[100];
int prestack[100];
long long count;
/*核心**,此**中,需要完成當沒有元素能夠進棧的時候, 我要輸出出棧的序列。完成第i個元素進棧的時候,接下來要進行的兩種操作。*/
//i表示有多少個元素已經進棧
/*j為prestack陣列的下標,表示如果為出棧操作, 則需將出棧元素的值賦給prestack[j]。*/
void put(int i,int j)
break;
case 2:
//下面為進棧操作,基本思想如出棧操作
s.top++;
s.data[s.top]=original[i];
put(i+1,j);
s.top--;
break;}}
}int main()
}
棧和佇列B題
題目描述 description 在大學裡學習了乙個學期了,大家大都對所學的專業有了基本的了解。許多同學也已經知道了到大二要開一門課叫做 資料結構 那麼今天給你們提前講一下乙個最簡單的資料結構 棧。棧的基本操作有3種 push,pop,top。例如,給你乙個數列 1 2 3 4 push 向棧中加入...
棧和佇列迷宮問題
define n 6 int maze n n 通過乙個數字來創造乙個6 6的迷宮,其中 0代表牆,1代表能夠走的路。這裡將陣列通過畫圖軟體畫出來,這裡紅色的1代表迷宮的入口,綠色的 1代表迷宮的出口。這個陣列所建立的迷宮是相對複雜的一種迷宮,首先這個迷宮是存在環的 這幾個1,如果你的迷宮函式只是用...
棧和佇列 最小棧
題目要求 設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。示例 minstack minstack new minstack minstack.pus...