設計乙個有getMin功能的棧

2021-08-21 21:37:29 字數 1439 閱讀 6282

使用c++完成《程式設計師**面試指南 it名企演算法與資料結構題目》

實現乙個特殊的棧,在實現棧的基本功能基礎上,再實現返回棧中最小元素的操作

使用兩個棧,乙個棧用來儲存當前棧中的元素,起功能和乙個正常的棧沒有區別,這個棧記為stackdata;另乙個棧用於儲存每一步的最小值,這個棧記為stackmin

壓入資料規則:

假設當前資料為newnum,先將其壓入stackdata,然後判斷stackmin是否為空:

- 如果為空,則newnum壓入stackmin

- 如果不為空,則比較newnum和stackmin的棧頂元素中哪乙個更小

- 如果newnum更小或者兩者相等,則newnum也壓入stackmin

- 如果stackmin中棧頂元素小,則stackmin不壓入任何內容

彈出資料規則

getmin操作(查詢當前棧中的最小值操作)

由於stackmin始終記錄著stackdata中的最小值,所以,stackmin的棧頂元素始終是當前stackdata中的最小值

方案1實現**

class mystack1

void push(int newnum)else

if (newnum <= getmin())

stackdata.push(newnum);

}int pop()

int value = stackdata.top();

stackdata.pop();

if(value == getmin())

return value;

}int getmin()

return stackmin.top();

}};

壓入資料規則

彈出資料規則

getmin操作(查詢當前棧中最小值操作)

由於stackmin始終記錄著stackdata中的最小值,所以,stackmin的棧頂元素即為當前stackdata中的最小值

方案2實現**

class mystack2

void push(int newnum)else

if (newnumelse

stackdata.push(newnum);

}int pop()

stackmin.pop();

int popnum=stackdata.top();

stackdata.pop();

return popnum;

}int getmin()

return stackmin.top();

}};

第一種方案在stackmin的棧頂只存放當前stackdata裡的最小值一次,而第二種方案每次在壓入和彈出stackdata棧時都要壓入和彈出stackmin中資料,向stackmin棧中重複壓入當前stackdata裡的最小值

設計乙個有GetMin功能的棧

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

設計乙個有getmin功能的棧

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

乙個有getMin功能的棧

前言 這是學習 程式設計師 面試指南 一書的第一篇文章,也是部落格的第一篇文章,給自己加油,從現在開始堅持記錄學習。題目 實現乙個特殊的棧,在實現棧的基本功能的基礎上,再實現返回棧中最小值的操作。要求 1.pop push getmin操作的時間複雜度都是o 1 2.設計的棧型別可以使用現成的棧結構...