本文参考了网上有名的帖子微软等公司数据结构+算法面试100题系列
//c++编写 //多加一个辅助栈,栈顶为当前最小值,入栈时,比较入栈数据与辅助栈的栈顶元素的大小,要是<=辅助栈栈顶元//素,则数据入栈后,也加入辅助栈。也正因为如此,主栈栈顶元素总是大于等于辅助栈的栈顶元素,出栈时,比//较栈顶元素与辅助栈的元素,相等时就都出栈,要不只有主栈出栈。 //其中有一个困扰我的问题是,要是栈空了,再pop时,怎样返回出错信息?怎么知道是出错信息还是出栈的元素//呢? #include<iostream> using namespace std; #define MAXLENGTH 10 class minStack { int* pStackArray; //主栈 int* pMinStack; // 辅助栈 int sTop,mTop; //主栈栈顶与辅助栈栈顶 //构造函数,初始化数据 public: minStack() { pStackArray = new int[MAXLENGTH]; pMinStack = new int[MAXLENGTH]; sTop = mTop = -1; } //忘了写析构函数,要有人看着篇文章,就自己写一个吧。 bool isEmpty(){ if(-1 == sTop) return true; else return false; } bool isFull(){ if(MAXLENGTH - 1 == sTop) return true; else return false; } void push(int n){ if(!isFull()) { pStackArray[++sTop] = n; if(isEmpty()) pMinStack[++mTop] = n; else if(n <= pMinStack[mTop]) pMinStack[++mTop] = n; } } int pop(){ if(!isEmpty()){ if(pStackArray[sTop] == pMinStack[mTop]) mTop--; sTop--; return pStackArray[sTop+1]; } } int getTop(){ if(!isEmpty()) return pStackArray[sTop]; } int getMin(){ if(!isEmpty()) return pMinStack[mTop]; } }; //main元素是我自己随便写的,写的很烂,自己可以写好一点,好好测试一下这个类有什么问题,麻烦也给我说 //一声。 int main() { minStack minstack; minstack.push(1); minstack.push(2); minstack.push(0); minstack.push(3); int i = 4; while(i > 0){ cout << minstack.pop() << " "; cout << minstack.getMin() << endl; i--; } return 0; }