3 2 棧的最小值

2021-10-03 17:48:54 字數 2631 閱讀 9867

ntm

inim

um()

int \;minimum()

intmin

imum

(),其時間複雜度為o(1

)o(1)

o(1)

。該演算法的缺點是當棧中元素較多時浪費了較多空間。以下是實現**和測試**。測試結果如圖1所示。

//實現**

class

nodewithmin

nodewithmin operator

=(nodewithmin copyobject)

intgetvalue()

intgetminimum()

void

setvalue

(int va)

void

setminimum

(int min)};

class

mystack;~

mystack()

;bool

isfull()

;bool

isempty()

; nodewithmin peek()

;void

push

(nodewithmin value)

else

else

} topindex++;}

; nodewithmin pop()

;int

minimum()

void

printmystack()

cout <<

"mystack's minimum value "

<<

"is "

<<

minimum()

<

cout <<

"mystack's topindex "

<<

"is "

<< topindex << endl;

}private

:int stack_capacity;

nodewithmin* values;

int topindex;

};

//測試**

圖1.

以下演算法是對以上演算法的一種改進,可以減少用來儲存當前棧的最小值的額外的空間,特別是當前面進棧的資料值較小時,效果更好。該演算法用另外乙個棧來儲存資料棧的當前最小值。當第乙個值入資料棧時,儲存最小值的棧之後只會儲存第乙個資料棧的值以及之後比該值小的資料棧的值,因此節省了空間。求棧中最小值的函式為int

mini

mum(

)int \;minimum()

intmin

imum

(),其時間複雜度為o(1

)o(1)

o(1)

。以下是實現**和測試**。測試結果如圖2所示。

// 實現**

class

mystack;~

mystack()

;bool

isfull()

;bool

isempty()

;int

peek()

;void

push

(int value)

;int

pop();

void

printmystack()

cout <<

"mystack's topindex "

<<

"is "

<< topindex << endl;

}int

getcapacity()

void

setcapacity

(int value)

void

setvalues

(int

*value)

int*

getvalues()

void

settopindex

(int top=0)

intgettopindex()

private

:int stack_capacity;

int* values;

int topindex;};

class

mystackwithmin

:public mystack

~mystackwithmin()

void

push

(int value)};

intpop()

return popvalue;};

intminimum()

return

(*s)

.peek()

;}private

: mystack *s;

};

//測試**

圖2.

棧找最小值問題

question 實現乙個特殊的棧,在實現棧的基本功能的基礎上,在實現回棧中最小元素的操作 thinking sketch 定義倆個棧。同時壓入同時彈出,比如說乙個data,乙個min,當data棧新壓入的數大於min的棧頂,重複壓入min棧頂數 detailed 分別定義data,min倆個棧,p...

Lintcode 帶最小值的棧

帶最小值操作的棧 描述 筆記 資料 評測 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。您在真實的面試中是否遇到過這個題?yes 注意事項 如果堆疊中沒有數字則不能進行min方法的呼叫 樣...

帶最小值操作的棧

描述 實現乙個帶有取最小值min方法的棧,min方法將返回當前棧中的最小值。你實現的棧將支援push,pop 和 min 操作,所有操作要求都在o 1 時間內完成。樣例 push 1 pop return 1 push 2 push 3 min return 2 push 1 min return ...