定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素,要求函式min、push以及pop的時間複雜度都是o(1)
主要難點:將當前最小的元素min出棧之後,如何快速找到下乙個最小的元素?因此需要乙個輔助棧,每次push乙個新元素的時候,同時將最小元素push到輔助棧中;每次pop乙個元素出棧的時候,同時pop輔助棧。考慮到棧元素的型別可能是複雜的資料結構,在輔助棧中用最小元素的位置將能減少空間消耗。
**:
1 #include 2 #include 3 #include 4 #include 5view codeusing
namespace
std;
6 template 7
class
stackwithmin8;
11virtual ~stackwithmin(){};
12 t&top();
13const t& top() const;14
void
pop();
15void push(const t&value);
16const t& min() const;17
private
:18 dequem_data; //
用乙個deque來儲存棧裡的資料,型別為模板型別t
19 dequem_minindex; //
用乙個deque來儲存棧裡的最小資料的位置,型別為size_t
20};
2122 template t& stackwithmin::top()
2326 template const t& stackwithmin::top() const
2730 template void stackwithmin::pop()
3135
36 template void stackwithmin::push(const t&value)
3743
else
4449
else
5053}54
}55 template const t& stackwithmin::min() const
5661
intmain()62
91 }while(choice != '0'
);92
getch();
93return0;
94 }
求棧的最小元素
2.設計包含min函式的棧。定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 思路 我看到這道題目時,第一反應就是每次push乙個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的元素最...
Python3求棧最小元素
本文出自天外歸雲的 思路 入棧時靠輔助棧記住主棧元素中最小的,出棧時一直pop主棧元素直到輔助棧棧頂元素出現。如下 定義棧 超級棧 class stack object def init self self.items defpush self,ele defpeek self return sel...
求棧的最小元素或者佇列的最大元素
如果每次直接遍歷棧獲得最小元素,效率太低,而且時間複雜度也低,可以採用輔助棧,保持最小元素一直在棧頂,這樣獲取最小值就可以直接拿到。思想 定義乙個輔助棧,如果要插入的元素小於輔助棧棧頂的值則直接入棧,如果不是,則輔助棧插入的是輔助棧棧頂的值 棧中最小元素 出棧的時候,兩個棧一起出棧。舉個列子 入棧3...