资讯详情

《剑指offer-P28》【剑指Offer 30.包含min函数的栈】

??:博客不叫企鹅

??

  • C语言的级和高级
  • C项目
  • Leetcode刷题
  • 初始数据结构和算法
  • C 初阶和进阶
  • 计算机操作系统的深入理解
  • 《高质量C/C 编程》

?? 代码仓库地址

?若有帮助【关注 点赞 收藏】,大家一起进步!


文章目录

  • ??一、题目
    • ??1.题目描述
    • ??2.原题链接
  • ??二、解题报告
    • ??1.思路分析
    • ??2.代码详解


??一、题目

??1.题目描述

在这里插入图片描述

??2.原题链接

剑指Offer 30.包含min函数的栈

??二、解题报告

??1.思路分析

??思路:

1.在同一个栈中使用数组模拟栈min记录这个栈的最小值 2、每次push最小操作更新值 3、每次pop操作更新的最小值,当栈顶指针减少到-1时,说明此时没有元素,根据题目要求将最小值赋值为INT_MAX

??2.代码详解

#define IN_MAX_SIZE 20000 typedef struct { 
             int* Data;              //1     int min;                //2     int top;                //3 } MinStack;  /** initialize your data structure here. */  MinStack* minStackCreate() { 
             MinStack *obj = (MinStack*)malloc(sizeof(MinStack));     obj->Data = (int*)malloc(sizeof(int)*IN_MAX_SIZE);     obj->min = INT_MAX;     obj->top = -1;     return obj; }  void minStackPush(MinStack* obj, int x) { 
             if(obj->top >= IN_MAX_SIZE ){ 
        
        return ;
    }
    obj->Data[++(obj->top)] = x;
    if(x < obj->min)
    { 
        
        obj->min = x;        
    }
}

void minStackPop(MinStack* obj) { 
        
    if(obj->top < 0){ 
        
        return ;
    }
    obj->top--;
    if(obj->top >= 0){ 
        
        obj->min = obj->Data[obj->top];
    }else{ 
        
        obj->min = INT_MAX;
    }
    for(int i = obj->top; i >= 0; --i){ 
        
        if(obj->Data[i] < obj->min){ 
        
            obj->min = obj->Data[i];
        }
    }
}

int minStackTop(MinStack* obj) { 
        
    return obj->Data[obj->top];
}

int minStackMin(MinStack* obj) { 
        
    return obj->min;
}

void minStackFree(MinStack* obj) { 
        
    free(obj->Data);
    free(obj);
}

1.给栈开辟内存的 2.记录最小值 3.记录当前top位置下标 minStackCreate:创建栈结构体,给数组开辟动态内存,初始化min为最大值,同时top为-1是为了配合后续操作 minStackPush:当栈的个数超过规定大小时,结束插入,否则插入并更新min minStackPop:当top小于0时,说明没有元素了,直接结束,否则减少一个元素,更新min


标签: p28j2mqjg密封连接器p28j4mj密封连接器p28k2aqjg连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台