设计一个支持 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
#include <stdio.h>
#include <stdlib.h>
#define maxsize 1000
typedef struct Stack {
int top; //存储最小元素
int *arr;
} MinStack;
#define maxsize 1000
/** initialize your data structure here. */
MinStack* minStackCreate() {
MinStack * ps= (MinStack*)malloc(sizeof(MinStack)) ;
if (!ps) return NULL;
ps->arr =(int *)malloc(sizeof(int)*maxsize);
ps->top = -1 ;
return ps ;
}
void minStackPush(MinStack* ps, int val) {
if(ps->top == maxsize-1) return ;
else
{
ps->arr[++ps->top] = val;
}
}
void minStackPop(MinStack* ps) {
if(ps->top == -1)
{
return ;
}
else
{
ps->arr[ps->top--];
}
}
int minStackTop(MinStack* ps) {
int val;
val=ps->arr[ps->top];
return val;
}
int minStackGetMin(MinStack* ps) {
int i =ps->top;
int min =ps->arr[i];
if(ps->top==-1) return 0;
for(i=ps->top;i>-1;i--)
{
if(ps->arr[i]<min)
{
min=ps->arr[i];
}
}
return min ;
}
void minStackFree(MinStack* ps) {
free(ps);
}
int main()
{
int min,top;
MinStack * ps = minStackCreate();
minStackPush(ps,-2);
minStackPush(ps,0);
minStackPush(ps,-3);
min=minStackGetMin(ps);
printf("栈里最小元素是:%d\n",min);
minStackPop(ps);
top=minStackTop(ps);
printf("栈顶元素是:%d\n",top);
min=minStackGetMin(ps);
printf("栈里最小元素是:%d\n",min);
minStackFree(ps);
}
/**
* 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);
*/
原文:https://www.cnblogs.com/cocobear9/p/12598079.html