LeetCode:155. Min Stack 最小栈(C语言)

题目描述:
设计一个支持 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);
*/

运行结果:
在这里插入图片描述

发布了124 篇原创文章 · 获赞 111 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/wangqingchuan92/article/details/104194759