題目:
設計包含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就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...