[질문] P165 검은 제안을 의미합니다 : 인터뷰 질문 30 : 최소 함수를 포함하는 스택 (포인터 사용은 구현되지 않음)

인터뷰 질문 30 : 최소 함수를 포함하는 스택 스택
의 데이터 구조를 정의합니다.이 유형에서 스택의 가장 작은 요소를 얻을 수있는 최소 함수를 구현하십시오. 이 스택에서 min, push, pop을 호출하는 시간 복잡도는 모두 O (1)입니다.

혁신 포인트 : MinStack 구조의 포인터 는 스택 아닙니다. 스택에서 튀어 나올 포인터 포인트 만 변경하면 됩니다. 스택 의 맨 위 요소를 팝업 하고
링크를 클릭 할 필요가 없습니다 . https : //leetcode-cn.com/problems/bao-han-minhan-shu -de-zhan-lcof /

typedef struct
{
    
    
    // 结构体里的是指针不是一个栈
    int* data_stack;
    int* min_stack;
    int data_index;
    int min_index;
} MinStack;

/** initialize your data structure here. */

MinStack* minStackCreate()
{
    
    
    MinStack* p = (MinStack*)malloc(sizeof(MinStack));
    p -> data_stack = (int*)malloc(sizeof(int) * 20000);
    p -> min_stack = (int*)malloc(sizeof(int) * 20000);
    p -> data_index = 0;
    p -> min_index = 0;
    return p;
}

int minStackTop(MinStack*);

void minStackPush(MinStack* obj, int x)
{
    
    
    (obj -> data_stack)[obj -> data_index++] = x;
    if(obj -> min_index == 0 || x < (obj -> min_stack)[obj -> min_index - 1])
        (obj -> min_stack)[obj -> min_index++] = x;
    else
        (obj -> min_stack)[obj -> min_index++] = (obj -> min_stack)[obj -> min_index - 1];
}

// 最值得学习的就是出栈只需改指针指向,无需删除值
void minStackPop(MinStack* obj)
{
    
    
    if(obj -> data_index > 0)
    {
    
    
        obj -> data_index--;
        obj -> min_index--;
    }
}

int minStackTop(MinStack* obj)
{
    
    
        return (obj -> data_stack)[obj -> data_index - 1];
}

int minStackMin(MinStack* obj)
{
    
    
        return (obj -> min_stack)[obj -> min_index - 1];
}

void minStackFree(MinStack* obj)
{
    
    
    free(obj -> data_stack);
    free(obj -> min_stack);
    free(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 = minStackMin(obj);
 
 * minStackFree(obj);
*/

추천

출처blog.csdn.net/m0_46613023/article/details/115005626