题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1)
/* 剑指offer面试题21 感觉这道题目答案有点问题。 不解! */ #include <iostream> using namespace std; #define Maxsize 100 struct stack{ int data[Maxsize]; int top; }MinStack,DataStack; void Init(stack &minstack,stack &datastack){ minstack.top = -1; datastack.top = -1; } void push(int n){ if(DataStack.top == Maxsize-1){ return; } DataStack.top++; DataStack.data[DataStack.top] = n; if(MinStack.top == -1 || MinStack.data[MinStack.top] > n){ MinStack.top++; MinStack.data[MinStack.top] = n; } else{ int Tmp = MinStack.data[MinStack.top]; MinStack.top++; MinStack.data[MinStack.top] = Tmp; } } void Min(){ cout << MinStack.data[MinStack.top]; MinStack.top--; } int main() { Init(MinStack,DataStack); int input; cin >> input; while(input != 0){ push(input); cin >> input; } while(MinStack.top > -1){ Min(); } return 0; }