漫畫演算法筆記 最小棧

vbs16發表於2020-11-09

漫畫演算法筆記

最小棧

#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;

template<typename T>
class MinStack
{
public:
	//入棧
	void push(T element)
	{
		_mainStack.push(element);
		//如果輔助棧為空,或者新元素小於或等於輔助棧棧頂,則將新元素壓入輔助棧
		if ( _minStack.empty() || element <= _minStack.top() )
		{
			_minStack.push(element);
		}
	}
	//出棧
	T pop()
	{
		//如果出棧元素和輔助棧棧頂元素值相等,輔助棧出棧
		if ( _mainStack.top() == _minStack.top() )
		{
			_minStack.pop();
		}
		T tmp = _mainStack.top();
		_mainStack.pop();
		return tmp;
	}

	//獲取棧的最小元素
	T getMin()
	{
		if ( _minStack.empty() )
		{
			throw exception("stack is empty");
		}
		return _minStack.top();
	}
private:
	stack<T> _mainStack;
	stack<T> _minStack;
};

int main(int argc, char** argv)
{
	MinStack<int> myStack;
	myStack.push(4);
	myStack.push(9);
	myStack.push(7);
	myStack.push(3);
	myStack.push(8);
	myStack.push(5);
	cout << myStack.getMin() << endl;	//3
	myStack.pop();
	myStack.pop();
	myStack.pop();
	cout << myStack.getMin() << endl;	//4
	system("pause");
	return 0;
}


相關文章