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...