劍指offer 30 包含min函式的棧

2021-09-13 16:36:51 字數 1200 閱讀 5216

這道題的題目可以描述為:定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的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...