定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min、push、及pop的時間複雜度都是o(1)。
首先,棧的特點是「先進後出,後進先出」,因此,對於pop和push兩個操作自然都是直接放入棧頂和直接在棧頂刪除元素,那麼如果要找棧中的最小值min,因為要求時間複雜度為o(1),因此肯定不能遍歷棧找出最小元素,這裡可以想到使用在這個棧的資料結構中使用兩個棧,乙個棧用來正常的存放刪除資料,另乙個棧就用來存放當前棧中的最小值;
當第一次push進棧的時候,就將資料也push進min棧中,並且min棧中的棧頂元素為當前棧的最小值,當push的資料比min棧中的棧頂元素小的時候,就將push的資料也放進min棧中,當push的資料比min棧中的棧頂元素大的時候,就在再次將min棧中的棧頂元素再壓進棧,因此,這樣下去,min棧中棧頂元素始終為當前資料棧的最小值;而進行pop資料的時候,在pop資料棧的棧頂元素時也pop出min棧的棧頂元素,這樣的話還是保證了min棧中棧頂元素為最小值,且時間複雜度為o(1);
上述內容可畫圖如下:
程式設計如下:
#include #include using namespace std;template class my_stack void my_push(t data)//push資料 _checkcapacity();//檢查容量 _data[_size] = data; if(data
執行程式:
可以看到,每pop一次資料,都能輸出當前棧中的最小值,且時間複雜度都為o(1)。
《完》本文出自 「敲完**好睡覺zzz」 部落格,請務必保留此出處
js 包含min函式的棧 包含min函式的棧
目標 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min push 及 pop 的時間複雜度都是 o 1 設計思路 我們要做的是在我們每次資料入棧的時候,記錄當前資料棧中最小值,並且在pop 出棧之後依然能找到最小值 方案 如果只用乙個 min 變數來儲...
包含min函式的棧
題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 n代表將要輸入的操作的步驟數。接下來有n行,每行開始有乙個字母ci。ci s 時,接下有乙個數字k,代...
包含min函式的棧
1.問題描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的函式,在該棧中呼叫min,push及pop的時間複雜度都為o 1 來自 劍指offer 2.分析 我們可以使用乙個輔助棧,專門來處理題目中得到棧的最小元素的函式時間複雜度為o 1 的這個需求。當我們壓棧時,另外乙個棧正常進行,...