美文网首页
【微软面试一百题:2】设计包含 min 函数的栈

【微软面试一百题:2】设计包含 min 函数的栈

作者: 希崽家的小哲 | 来源:发表于2015-05-28 17:14 被阅读25次

定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。 要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。

hint: 栈元素携带min的信息
#include<iostream>
#include <stdlib.h>
using namespace std;

struct MinStackElement {
    int data;
    int min;
};

struct MinStack{
    int size;
    int top;
    MinStackElement * data;
};

MinStack minStackInit(int maxSize){
    MinStack stack;
    stack.size = maxSize;
    stack.data = (MinStackElement *)
    malloc(sizeof(MinStackElement)*maxSize);
    stack.top = 0;
    return  stack;
}

void MinStackFree(MinStack &stack){
    free(stack.data);
}

void push(MinStack &stack,int d){
    if (stack.top==stack.size) {
       // error("out of stack");
    }
    MinStackElement* p = stack.data+stack.top;
    p->data = d;
    p->min = (stack.top==0 ?d:stack.data[stack.top-1].min);
    if (d<p->min) {
        p->min = d;
    }
    stack.top++;
}

int pop(MinStack stack){
    if (stack.top ==0) {
        //error("stack is empty");
    }
    return stack.data[--stack.top].data;
}

int min(MinStack stack){
    if (stack.top ==0) {
        //error("stack is empty");
    }
    return stack.data[--stack.top].min;
}

int main(){
    MinStack stack = minStackInit(6);
    push(stack, 1);
    push(stack, 2);
    push(stack, 3);
    push(stack, 4);
    push(stack, 5);
    push(stack, 6);
    cout<<pop(stack)<<endl;
    cout<<min(stack)<<endl;
    MinStackFree(stack);
    return  0;
}

相关文章

网友评论

      本文标题:【微软面试一百题:2】设计包含 min 函数的栈

      本文链接:https://www.haomeiwen.com/subject/zlirqttx.html