定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
#include <iostream>
using namespace std;
#define MAX_SIZE 1000
typedef struct MinStackElement
{
int value;
int min;
}StackElement;
class MinStack
{
private:
int top;
int size;
StackElement*data;
public:
MinStack()
:top(-1), size(MAX_SIZE)
{
data = new StackElement[size];
}
~MinStack()
{
delete[] data;
}
void push(int datain)
{
if(top == MAX_SIZE - 1)
{
cout<<"out of memory"<<endl;
}
data[++top].value = datain;
if(top == 0)
{
data[top].min = datain;
}
else
{
data[top].min = datain < data[top-1].min ? datain : data[top-1].min;
}
}
int pop()
{
if(top < 0)
{
cout<<"No Element"<<endl;
return -1;
}
return data[top].value;
}
int min()
{
if(top < 0)
{
cout<<"No Element"<<endl;
return -1;
}
return data[top].min;
}
};