棧 佇列系列之實現乙個包含min函式的棧

2021-06-23 04:19:31 字數 1007 閱讀 4415

問題:實現乙個棧,除了push、pop操作外,還包括函式min實現返回棧中最小值的功能,要求時間複雜度均為o(1)

思路:增加乙個輔助棧,將每次入棧操作後棧的最小元素(之前最小元素和新入棧元素的較小值)都儲存在輔助棧裡

實現:

#include #include #include using namespace std;

template class stackwithmin

//建構函式

~stackwithmin(){} //析構函式

t& top();

const t& top() const; //取棧頂元素

void pop(); //刪除棧頂元素

void push(const t& value); //將元素壓入棧

const t& min() const; //取棧中最小元素

bool empty() const;

size_t size();

private:

stackm_data;

stackm_min; //輔助棧

};template void stackwithmin::push(const t &value) //入棧

template const t& stackwithmin::min() const //返回棧中最小值

template const t& stackwithmin::top() const //返回棧頂元素

template bool stackwithmin::empty() const

template size_t stackwithmin::size()

void test_stackwithmin()

{ stackwithmintest_stack;

test_stack.push(3);

cout<<"棧中最小元素為:"<

包含min函式的棧和兩個棧實現乙個佇列

題目 定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 分析 這是google的一道面試題。看到這道題目時,第一反應就是每次push乙個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的...

包含min函式的棧和兩個棧實現乙個佇列

題目 定義棧的資料結構,要求新增乙個min函式,能夠得到棧的最小元素。要求函式min push以及pop的時間複雜度都是o 1 分析 這是google的一道面試題。看到這道題目時,第一反應就是每次push乙個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的...

兩個棧實現乙個佇列 兩個佇列實現乙個棧

這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將top元素push到stack 2中,然後將stack 1 pop一次直到stack 1剩下最後乙個元素,這個就是最先push進去的,我們把它pop掉就可以了,同理,我們求queue的fro...