设计一个算法实现对栈取最小值的操作min函数,要求时间复杂度O(1)。
[算法分析]
将之前的最小值与新压入栈的元素两者的值进行比较,把每次较小的元素都保存在另一个辅助栈中。这样可以保证即使最小值出栈之后也可以找到次小的其他值。用两个栈来实现,栈sData存放入栈元素,栈sMin存放最小值。
[算法描述]
#define MaxSize 50
Typedef struct{
Elemtype data[MaxSize];
int top;
}Stack;
Stack sData,sMin; // 入栈
void Push(Elemtype data){ // 第一个元素同时压入两个栈
if(sData.empty()){
push(sMin,data);
}else{
if(data
push(sData,data);
push(sMin,data);
}else{
push(sData,data);
}
}
}
void Pop(){ // 栈顶元素相等同时出栈
if(top(sMin)==top(sData)){
pop(sData);
pop(sMin);
}else{
pop(sData);
}
}
Elemtype min(){
return top(sMin);
}



