算法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;
}
相关文章
相关标签/搜索