题目描述:
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答:
#define LEN 0xffff
typedef struct
{
int *data;
int top;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate()
{
MinStack *obj = malloc(sizeof(MinStack));
obj->data = malloc(sizeof(int)*LEN);
obj->top = -1;
return obj;
}
void minStackPush(MinStack* obj, int x)
{
if(obj->top >= LEN-1)
{
return;
}
obj->top++;
obj->data[obj->top] = x;
}
void minStackPop(MinStack* obj)
{
if(obj->top <= -1)
{
return;
}
obj->top--; //将top自减等同于删除该元素
}
int minStackTop(MinStack* obj)
{
if(obj->top <= -1)
{
return;
}
return obj->data[obj->top];
}
int minStackGetMin(MinStack* obj)
{
if(obj->top <= -1)
{
return;
}
int temp = 0;
int i = 0;
temp = obj->data[0];
for(i = 0; i<=obj->top; i++)
{
if(obj->data[i]<temp)
{
temp = obj->data[i];
}
}
printf("min is %d\n",temp);
return temp;
}
void minStackFree(MinStack* obj)
{
free(obj->data);
obj->data = 0;
free(obj);
obj = NULL;
}
/**
* Your MinStack struct will be instantiated and called as such:
* MinStack* obj = minStackCreate();
* minStackPush(obj, x);
* minStackPop(obj);
* int param_3 = minStackTop(obj);
* int param_4 = minStackGetMin(obj);
* minStackFree(obj);
*/
运行结果: