leetcode 155. 最小スタック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を返します.
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を返します.
typedef struct MinStack{
struct MinStack *next;
int val;
int min_val;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate() {
MinStack *min_stack = (MinStack*)malloc(sizeof(MinStack));
min_stack->next = NULL;
min_stack->min_val = INT_MIN;
return min_stack;
}
void minStackPush(MinStack* obj, int x) {
MinStack *min_stack = (MinStack*)malloc(sizeof(MinStack));
min_stack->val = x;
if ((obj->next == NULL) || ((obj->next)->min_val >= x)) {
min_stack->min_val = x;
} else {
min_stack->min_val = (obj->next)->min_val;
}
min_stack->next = obj->next;
obj->next = min_stack;
}
void minStackPop(MinStack* obj) {
if (obj->next == NULL) {
return;
}
MinStack *temp = obj->next;
obj->next = temp->next;
free(temp);
}
int minStackTop(MinStack* obj) {
if (obj->next == NULL) {
return -1;
}
return (obj->next)->val;
}
int minStackGetMin(MinStack* obj) {
if (obj->next == NULL) {
return -1;
}
return (obj->next)->min_val;
}
void minStackFree(MinStack* obj) {
while (obj->next != NULL) {
minStackPop(obj);
}
}
/**
* 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);
*/