
目标
设计一个支持 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.
实现:
C :
typedef struct {
int top;
int minTop;
int *data;
int *min;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate(int maxSize) {
MinStack *stack = (MinStack*)malloc(maxSize*sizeof(MinStack));
stack->data = (int*)malloc(maxSize *sizeof(int));
stack->min = (int*)malloc(maxSize *sizeof(int));
// memset(stack->data,0,maxSize);
// memset(stack->min,0,maxSize);
stack->top = -1;
stack->minTop = -1;
return stack;
}
void minStackPush(MinStack* obj, int x) {
obj->top++;
obj->data[obj->top] = x;
if(obj->minTop == -1 || obj->min[obj->minTop] >= x) {
obj->minTop++;
obj->min[obj->minTop] = x;
}
}
void minStackPop(MinStack* obj) {
int temp, temp1;
if(obj->top == -1){
return;
}
temp = obj->data[obj->top];
obj->top--;
if(temp == obj->min[obj->minTop]){
temp1 = obj->min[obj->minTop];
obj->minTop--;
}
}
int minStackTop(MinStack* obj) {
return obj->data[obj->top];
}
int minStackGetMin(MinStack* obj) {
return obj->min[obj->minTop];
}
void minStackFree(MinStack* obj) {
}
/**
* Your MinStack struct will be instantiated and called as such:
* struct MinStack* obj = minStackCreate(maxSize);
* minStackPush(obj, x);
* minStackPop(obj);
* int param_3 = minStackTop(obj);
* int param_4 = minStackGetMin(obj);
* minStackFree(obj);
*/




近期评论