算法3-設計包含min函數的棧

題目:定義棧的數據結構,要求添加一個min函數,可以獲得棧的最小元素。
要求函數min、push以及pop的時間複雜度都是O(1)。ios

思路:使用一個輔助棧來保存最小元素,這個解法簡單不失優雅。設該輔助棧名字爲minimum stack,其棧頂元素爲當前棧中的最小元素。數據結構

            要獲取當前棧中最小元素,只須要返回minimum stack的棧頂元素便可。函數

            每次執行push操做,檢查push的元素是否小於或等於minimum stack棧頂元素。若是是,則也push該元素到minimum stack中。spa

            當執行pop操做的時候,檢查pop的元素是否與當前最小值相等。若是相同,則須要將改元素從minimum stack中pop出去。code

#include<stdio.h>
#include <iostream>
#include <stack> 
using namespace std ;

struct StackGetMin {
	  stack<int> elements;
	  stack<int> minStack;
	  void push(int x) {
		elements.push(x);
		if (minStack.empty() || x <= minStack.top()) //push的元素小於當前minStack的最小元素,則push到minStack中
		  minStack.push(x);
	  }
	  bool pop() {
		if (elements.empty()) return false;
		if (elements.top() == minStack.top()) //若是原始棧棧頂元素與minStack棧頂元素相同,則將該元素也從minStack中pop出去。
		  minStack.pop();
		elements.pop();
		return true;
	  }
	  bool getMin(int &min) {
		if (minStack.empty()) {
		  return false;
		} else {
		  min = minStack.top();
		  return true;
		}
	  }
};

int main()
{
	StackGetMin stackMin;
	stackMin.push(2);
	stackMin.push(6);
	stackMin.push(4);
	stackMin.push(1);
	stackMin.push(5);
	int min =0;
	stackMin.getMin(min );
	cout<<min;
	getchar();
    return 0;
}
相關文章
相關標籤/搜索