问题描述
设计包含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 64
int 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());
}