定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。

要求函数min、push 以及pop 的时间复杂度都是O(1)。

堆栈是后进先出的数据结构。当某个元素从堆栈中弹出时,状态将恢复到该元素被推送之前的原始状态。所以我们也可以恢复最小元素。

struct MinStackElement {
   int data;
   int min;
 };
 struct MinStack {
   MinStackElement * data;
   int size;
   int top;
 }
 MinStack MinStackInit(int maxSize) {
   MinStack stack;
   stack.size = maxSize;
   stack.data = (MinStackElement) malloc(sizeof(MinStackElement)maxSize);
   stack.top = 0;
   return stack;
 }
 void MinStackFree(MinStack stack) {
   free(stack.data);
 }
 void MinStackPush(MinStack stack, int d) {
   if (stack.top == stack.size) error(“out of stack space.);
   MinStackElement* p = stack.data[stack.top];
   p->data = d;
   p->min = (stack.top==0?d : stack.data[top-1]);
   if (p->min > d) p->min = d;
   top ++;
 }
 int MinStackPop(MinStack stack) {
   if (stack.top == 0) error(“stack is empty!);
   return stack.data[--stack.top].data;
 }
 int MinStackMin(MinStack stack) {
   if (stack.top == 0) error(“stack is empty!);
   return stack.data[stack.top-1].min;