(微软面试100题)设计包含min 函数的栈

来源:互联网 发布:不会算法程序员工资 编辑:程序博客网 时间:2024/06/05 18:28

问题描述

设计包含min 函数的栈。

定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。

要求函数min、push 以及pop 的时间复杂度都是O(1)。

主要思路:

使用一个Min辅助栈实现

#include "stdafx.h"#include <stdio.h>#include <stdlib.h>/*设计包含min 函数的栈。定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。要求函数min、push 以及pop 的时间复杂度都是O(1)。*/#define STACK_SIZE      64#define MIN_STACK_SIZE  64int top = -1;int min_top = -1;int stack[STACK_SIZE];int min_stack[STACK_SIZE];int push(int val){    if (++top >= STACK_SIZE){        printf("Stack overflow!\n");        return -1;    }    stack[top] = val;    if (min_top == -1){        min_stack[++min_top] = val;    }    else{        if (val < min_stack[min_top] && min_top < MIN_STACK_SIZE){            min_stack[++min_top] = val;        }    }    return 0;}int pop(){    int val;    if (top == -1){        printf("Stack is empty!\n");        return -1;    }    val = stack[top--];    if (val < min_stack[min_top]){        min_top--;    }    return 0;}int min(){    return min_stack[min_top];}int main(){    push(13);    printf("Min is %d.\n", min());    push(10);    printf("Min is %d.\n", min());    push(5);    printf("Min is %d.\n", min());    push(3);    printf("Min is %d.\n", min());    push(12);    printf("Min is %d.\n", min());    push(2);    printf("Min is %d.\n", min());    pop();    printf("Min is %d.\n", min());    pop();    printf("Min is %d.\n", min());    pop();    printf("Min is %d.\n", min());}


原创粉丝点击