帶有O(1)時間返回最小值的stack

主要是在輔助的棧中push當前最小的值,若data棧pop出的數不是當前最小的,則輔助棧不動;若data棧pop出當前最小的值,則輔助棧也pop
#include <vector>
#include <iostream>

using namespace std;

template<typename object>
class minStack
{
public:
	void push(object val)
	{
		data.push_back(val);
		if(minVal.empty()||val<=minVal.back()) //需要等號
			minVal.push_back(val);
	}

	void pop()
	{
		if(data.back()==minVal.back())
			minVal.pop_back();
		data.pop_back();
	}

	void printMin()
	{
		if(minVal.empty())
			cout<<"None element"<<endl;
		else
			cout<<minVal.back()<<endl;

	}
private:
	vector<object> data;
	vector<object> minVal;
};


int main()
{
	minStack<int> mystack;
	mystack.push(5);
	mystack.printMin();  //5
	mystack.push(4);
	mystack.printMin();  //4
	mystack.push(6);
	mystack.printMin();  //4
	mystack.push(3);
	mystack.printMin();  //3
	mystack.pop();
	mystack.printMin();  //4
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章