乙個有getMin功能的棧

2021-07-30 14:15:43 字數 1227 閱讀 1736

前言:這是學習《程式設計師**面試指南》一書的第一篇文章,也是部落格的第一篇文章,給自己加油,從現在開始堅持記錄學習。

題目:實現乙個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小值的操作。

要求:1.pop、push、getmin操作的時間複雜度都是o(1)。

2.設計的棧型別可以使用現成的棧結構。

採用兩個棧,

stackdata作為資料棧儲存資料;

stackmin作為輔助棧儲存stackdata資料棧中每一步的最小元素。

壓入資料規則:

1.將資料newnum壓入stackdata資料棧中,執行下一步;

2.判斷stackmin輔助棧是否為空,

若為空,將newnum同步壓入stackmin輔助棧,執行下一步;

若不為空,直接執行下一步;

3.若 newnum <= stackmin.peek(),將newnum同步壓入stackmin,

若 newnum > stackmin.peek(),結束操作

彈出資料規則:

1.判斷stackdata棧是否為空,

若為空,結束操作;

若不為空,彈出棧頂元素,執行下一步;

2.判斷stackmin輔助棧是否為空,

若為空,結束操作

若不為空,直接執行下一步;

3.若 stackdata棧頂元素 == getmin(),彈出stackmin棧頂元素

若 stackdata棧頂元素 > getmin(),結束操作

(注:根據壓入規則,stackdata棧中元素 >= stackmin棧中元素,所以上面不必考慮小於的情況)

查詢最小值操作:

根據以上規則, stackmin的棧頂元素始終是當前stackdata棧的最小值

public class mystack 

public void push(int newnum) else if(newnum<=this.getmin())

this.stackdata.push(newnum); }

public int pop()

if(this.stackdata.peek() == this.getmin())

return this.stackdata.pop(); }

public int getmin()

return this.stackmin.peek(); }

}

設計乙個有GetMin功能的棧

兩種資料壓入規則,也就是兩種實現的方法,利用兩個棧,乙個stackdata棧用來壓入所有的資料,所有資料都會壓入此棧,乙個satckmin用來壓入最小元素 對應的就是stackdata中的最小元素 第一種方法 壓棧規則 1 當將資料壓入棧stackdata時,判斷stackmin棧是否為空,為空則將...

設計乙個有getMin功能的棧

使用c 完成 程式設計師 面試指南 it名企演算法與資料結構題目 實現乙個特殊的棧,在實現棧的基本功能基礎上,再實現返回棧中最小元素的操作 使用兩個棧,乙個棧用來儲存當前棧中的元素,起功能和乙個正常的棧沒有區別,這個棧記為stackdata 另乙個棧用於儲存每一步的最小值,這個棧記為stackmin...

設計乙個有getmin功能的棧

程式設計師 面試指南 it名企演算法與資料結構題目最優解 第一問 有這樣的乙個問題 設計乙個棧,實現棧的基本功能的基礎上,在實現返回棧中的最小元素操作。這個問題看似不難,只要在棧push每乙個元素的時候將這個元素和乙個最小數min進行大小比較,小於min就把這個元素的值賦給min,如此一來就可以得出...