【微软面试100题】2.设计包含min函数的栈
2013-03-14 17:12
176 查看
/************************************************************************/ /* 2.设计包含 min 函数的栈。 定义栈的数据结构,要求添加一个 min 函数,能够得到栈的最小元素。 要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。 */ /************************************************************************/ /************************************************************************/ /* 思路:在栈的元素里增加一个字段,记录以这个元素为栈顶的时候的栈的最小值。 这样就能保证出栈时不用在更新最小值了,因为出栈元素的下一个元素中保留了这个值, 栈顶元素里的min值总是最小的 */ /************************************************************************/ #include <stdio.h> #include <malloc.h> #define MaxNum 100 #define Success 1 #define Fail 0 struct StackElement { int date; int min; }; struct MyStack { StackElement *MinStack; int top; }; void Stack_init(MyStack& stack) { stack.MinStack = (StackElement*)malloc(sizeof(StackElement) * MaxNum); stack.top = 0; } int Stack_push(MyStack& stack,int d) { if(stack.top == MaxNum) { printf("push error : Stack is full!\n"); return Fail; } StackElement *p = &(stack.MinStack[stack.top]); //注意加& 哦 p->date = d; p->min = (stack.top == 0 ? d : stack.MinStack[stack.top - 1].min); if(d < p->min) p->min = d; stack.top++; return Success; } int Stack_pop(MyStack& stack, int *d) { if(stack.top == 0) { printf("pop error : Stack is empty!\n"); return Fail; } *d = stack.MinStack[--stack.top].date; return Success; } int Stack_min(MyStack stack, int *d) { if(stack.top == 0) { printf("min error : Stack is empty!\n"); return Fail; } *d = stack.MinStack[stack.top - 1].min; return Success; } int main() { int N; while(scanf("%d", &N) != EOF) { MyStack stack; Stack_init(stack); int i = 0; int min; int d[] = {4,5,0,8,53,1,2,7,65,8,-1,-2}; for(i = 0; i <N; i++ ) { Stack_push(stack, d[i]); } //Stack_pop(stack, &i); Stack_min(stack,&min); printf("Min is %d\n", min); } return 0; }
相关文章推荐
- [微软面试100题] 设计包含min函数的栈
- 微软面试100题之二 设计包含min函数的栈。
- 微软等面试100题筛选答案-2-设计包含min函数的栈
- 微软面试100题系列---设计包含min函数的栈
- 微软等面试100题第二题:设计包含min函数的栈
- 微软100题-第2题设计包含min函数的栈
- 【微软100面试题实现】第02题:设计包含min函数的栈
- 包含min函数的栈 【微软面试100题 第二题】
- 微软面试100题系列-设计包含 min 函数的栈
- 面试100题:2.设计包含min函数的栈
- (微软面试100题)设计包含min 函数的栈
- 微软面试(2/100)--设计包含函数的栈
- 面试100题:2.设计包含min函数的栈
- 微软算法100题02 设计包含min函数的栈
- 算法面试100题——2.设计包含min函数的栈
- 包含min函数的栈 【微软面试100题 第二题】
- 设计一个魔方(六面)的程序 【微软面试100题 第四十四题】
- 微软面试题2、设计包含min函数的栈
- To_10_r_100_2---设计包含min函数的栈
- 设计一个魔方(六面)的程序 【微软面试100题 第四十四题】