求棧中的最小元素

2022-09-02 18:54:09 字數 1230 閱讀 5894

定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素,要求函式min、push以及pop的時間複雜度都是o(1)

主要難點:將當前最小的元素min出棧之後,如何快速找到下乙個最小的元素?因此需要乙個輔助棧,每次push乙個新元素的時候,同時將最小元素push到輔助棧中;每次pop乙個元素出棧的時候,同時pop輔助棧。考慮到棧元素的型別可能是複雜的資料結構,在輔助棧中用最小元素的位置將能減少空間消耗。

**:

1 #include 2 #include 3 #include 4 #include 5

using

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 }

view code

求棧的最小元素

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