每天一演算法(進棧,出棧,棧中最小值)

2021-06-09 12:34:55 字數 1253 閱讀 2187

題目:

設計包含min函式的棧(棧)

定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。

要求函式min、push以及pop的時間複雜度都是o(1)。

舉例:例如 先後進棧int型(10,7,3,3,8,5,2,6),進棧出棧容易理解,,但需要注意的是,當進行出棧操作後,再進行最後元素的查詢,,則可能最小元素需要進行變化,如,以上整形全部進棧後,先min()得到2,進行pop()後,再min()得到的仍為2,,,但再進行pop()操作後,再min()操作得到的卻變化了,變為了3。。。

解決方案:

在棧stack中是使用的向量vector容器。。該容器中的型別為自定義的elem結構體,,

該結構體包括:元素值value;

目前在棧內的所有元素的最小值minvalue。

因此,在每次進棧操作過程中,首先判斷棧是否為空,即自定義的棧中的向量vector是否為空,,如果不為空,則需要與棧頂元素的minvalue進行大小的比較,,小值作為最新的elem元素的minvalue;

vs2010中執行程式如下:例子程式是正確的,,如果有什麼錯誤,希望各位高手指定,,呵呵。。

當然,,如果在實際應用過程中,如果t是自定義的新類的話,,則自定義的這個類,需要自定義"<" 的比較運算子。。

#include#includeusing namespace std;

template struct elem

;template class stack

; void push(t x);

t pop();

t min();

public:

vector> elemvector;

};//執行入棧操作,首先確定是否為空,如果為空,則直接入棧;否則需要比較元素與棧中目前最小元素的大小,再入棧。

template void stack::push(t x)

else

return;

}//執行出棧操作,需首先確定是否棧己空。

template t stack::pop()

else }

//執行尋找棧中最小元素的操作。

template t stack::min()

else }

int main()

{ stacka;

a.push(3);

a.push(5);

a.push(2);

a.push(6);

cout<

實現乙個返回最小值的棧

一 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值的操作 的時間複雜度為o 1 1 棧的基本操作入棧 push 出棧 pop 查詢棧頂 top 棧的元素個數 size 檢查棧是否為空 empty 我們知道入棧 push 和出棧 pop 時間複雜度本身就為o 1 所以只要讓min...

資料結構 遞迴法求解棧中最大值和最小值

遞迴法求解最大值和最小值 問題描述 若乙個無序的線性表a maxsize 採用順序儲存方式,元素型別為整型數。試寫出遞迴演算法求出a中的最大元素和最小元素。要求 順序表的資料通過呼叫演算法initrandomize 隨機產生。遞迴求棧中最大值的核心 如下 int recursion max sqst...

一天一演算法(37) 棧的壓入,彈出序列

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...