求棧的最小元素

2021-06-18 00:32:10 字數 786 閱讀 1667

2.設計包含min函式的棧。

定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。

要求函式min、push以及pop的時間複雜度都是o(1)。

思路:我看到這道題目時,第一反應就是每次push乙個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的元素最先出棧,這種思路設計的資料結構已經不是乙個棧了。

在棧裡新增乙個成員變數存放最小元素(或最小元素的位置)。每次push乙個新元素進棧的時候,如果該元素比當前的最小元素還要小,則更新最小元素。

因此僅僅只新增乙個成員變數存放最小元素(或最小元素的位置)是不夠的。我們需要乙個輔助棧。每次push乙個新元素的時候,同時將最小元素(或最小元素的位置。考慮到棧元素的型別可能是複雜的資料結構,用最小元素的位置將能減少空間消耗)push到輔助棧中;每次pop乙個元素出棧的時候,同時pop輔助棧。

#include #include #include #define maxsize 1000

using namespace std;

struct stack

;void init(stack *a, stack *b)

void push(stack *a, stack *b, int value)

else

b->top++;

}void pop(stack *a, stack *b)

void min(stack *b)

int main()

模版實現參考:

求棧中的最小元素

定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素,要求函式min push以及pop的時間複雜度都是o 1 主要難點 將當前最小的元素min出棧之後,如何快速找到下乙個最小的元素?因此需要乙個輔助棧,每次push乙個新元素的時候,同時將最小元素push到輔助棧中 每次pop乙個元素出棧...

Python3求棧最小元素

本文出自天外歸雲的 思路 入棧時靠輔助棧記住主棧元素中最小的,出棧時一直pop主棧元素直到輔助棧棧頂元素出現。如下 定義棧 超級棧 class stack object def init self self.items defpush self,ele defpeek self return sel...

求棧的最小元素或者佇列的最大元素

如果每次直接遍歷棧獲得最小元素,效率太低,而且時間複雜度也低,可以採用輔助棧,保持最小元素一直在棧頂,這樣獲取最小值就可以直接拿到。思想 定義乙個輔助棧,如果要插入的元素小於輔助棧棧頂的值則直接入棧,如果不是,則輔助棧插入的是輔助棧棧頂的值 棧中最小元素 出棧的時候,兩個棧一起出棧。舉個列子 入棧3...