本文参考了网上有名的帖子微软等公司数据结构+算法面试100题系列
//其中有一个困扰我的问题是,要是栈空了,再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;
}