设计包含 min函数的栈。
定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。
要求函数 min,push 以及 pop 的时间复杂度都是 O(1)
以下程序采用顺序链表实现,实现时参考了相关博客,有疏漏之处,欢迎指正。
思路:以空间换时间的方法
#include<stdio.h>
#define MAXSIZE 256
typedef struct minStackElement
{
int value;
int min;
}MinStackElement;
typedef struct minStack
{
MinStackElement data[MAXSIZE];//本来栈中只有一个元素,现在扩展成结构体,用来存放min
int top;
}MinStack;
int Init(MinStack *p)
{
int i;
for(i=0; i<MAXSIZE; i++)
{
p->data[i].value=0;
p->data[i].min=0;
}
p->top = 0;
return 0;
}
int Push(MinStack *p, int d)
{
if(p->top == MAXSIZE)
{
printf("stack full");
return -1;
}
p->data[p->top].value = d;
p->data[p->top].min = (p->top == 0 ? d : p->data[p->top-1].min);
if(p->data[p->top].min > d)
p->data[p->top].min = d;
p->top++;
return 0;
}
int Pop(MinStack *p)
{
if(p->top == 0)
{
printf("empty");
return -1;
}
return p->data[p->top--].value;
}
int getMin(MinStack *p)
{
if(p->top == 0)
{
printf("empty");
return -1;
}
return p->data[p->top-1].min;
}
int main()
{
int min;
MinStack ms;
MinStack *p = &ms;
Init(p);
Push(p,11);
Push(p,2);
Push(p,35);
Push(p,46);
Push(p,77);
Push(p,56);
Push(p,175);
Push(p,1);
min = getMin(p);
printf("min=%d\n",min);
}