??:博客不叫企鹅
??
- 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