問題:實現乙個棧,除了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...