問題 B 不同出棧情況 棧和佇列

2021-09-10 05:31:05 字數 1202 閱讀 9387

分析:本題第一反應便是無從下手。同時通過不斷在紙上模擬,會自然地想到回溯這方面去。但是怎麼回,確實乙個問題。

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...