這道題的題目可以描述為:定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式,在該棧中,呼叫min,push以及pop的時間複雜度都是o(1)。
typedef int datatype;
#define maxsize (100)
typedef structstack;
void stackinit(stack *ps)
void stackdestory(stack *ps)
//棧中入放乙個元素
void stackpush(stack *ps, datatype data)
//棧中彈出乙個元素
void stackpop(stack *ps)
//彈出棧頂元素
datatype stacktop(const stack *ps)
//返回棧的大小
int stacksize(const stack *ps)
//返回棧是否為空
int stackempty(const stack *ps)
這道題的思路分為以下三步:
(1)首先定義乙個大棧minstack,其中又包含兩個小棧m和s,其中s存放普通元素,m存放最小元素;
(2)入棧操作:每次同步進行,第一次壓入data時,s一定壓入data,當m棧為空時才壓入data。從第二次開始,首先s壓入data,當data(3)出棧操作:每次同步進行,data首先從s中彈出,當data==top(m)時,data才從m中彈出;
**如下:
typedef struct minstack;
void minstackinit(minstack *pms)
void minstackdestory(minstack *pms)
void minstackpush(minstack *pms, datatype data)
void minstackpop(minstack *pms)
}datatype minstacktop(minstack *pms)
datatype minstackmin(minstack *pms)
劍指Offer 30 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 首先觀察到min的時間複雜度是o 1 所以不可能是在我們呼叫min的時候再去計算棧中元素的最小值,最小值一定是提前儲存好的。其次最小值必須隨著push和pop更新,也就...
劍指offer 30 包含min函式的棧
定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式 時間複雜度應為o 1 常規思路的問題 如果每次push對棧排序,讓整個棧保持有序狀態,實際上已經破壞了棧這個結構,而且複雜度肯定不是o 1 如果用乙個變數記錄最小值,當這個最小值被pop出去後,找不到次小值。當然你也可以找個...
劍指offer 30 包含min函式的棧
題目鏈結 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的 min 函式在該棧中,呼叫 min push 及 pop 的時間複雜度都是 o 1 示例 minstack minstack new minstack minstack.push 2 minstack.push 0 minsta...