//设计包含Min函数的栈
//定义栈的数据结构,要求添加一个函数,能够得到栈的最小元素。要求函数Min, push,pop的时间复杂度都是O(1).
#include <iostream>
#include <cstdlib>
struct minStackElement{
int data;
int min;
};
struct minStack{
minStackElement *data;
int size;
int top;
};
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 minStackPush(minStack *stack,int d){
if(stack->top==stack->size){
std::cout<<"out of stack space.";
}
minStackElement *p=stack->data+stack->top;
p->data=d;
p->min=(stack->top==0?d:(stack->data+(stack->top-1))->min);
if(p->min>d)p->min=d;
stack->top++;
}
int minStackPop(minStack *stack){
if(stack->top==0)
std::cout<<"stack is empty";
int po= (stack->data+stack->top)->data;
stack->top--;
return po;
}
int minStackMin(minStack *stack){
if(stack->top==0)
std::cout<<"stack is empty";
return (stack->data+stack->top-1)->min;
}
int main(){
minStack *stack=minStackInit(5);
minStackPush(stack,5);
minStackPush(stack,6);
minStackPush(stack,10);
minStackPush(stack,7);
int mini=minStackMin(stack);
std::cout<<mini;
std::cin>>mini;
}
//PS:摘自某公司招聘题目,学习中,不喜随便喷