问题:实现一个特殊栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
要求:①pop、push、getMin操作的时间复杂度都是O(1);
②设计的栈类型可以使用现成的栈结构。
方法1:
建立俩个栈,一个栈储存数据元素,另一个栈储存当前数据栈中的最小元素(放在栈顶)。数据栈和最小栈同时动态更新。
//没有运行,有错的话各位指出!
class newstack{
private:
stack<int> data;
stack<int> Min;
public:
int pop(newstack s);
void push(newstack s, int item);
void getmin(newstack);
};
newstack s;
int newstack::pop(newstack s){
if(s.data.empty()){
cout << "stack is empty";
return 0;
}
s.Min.pop();
int temp = s.data.top();
s.data.pop();
return temp;
}
void newstack::push(newstack s, int item){
if(s.data.size()==0)
s.Min.push(item);
else if(s.Min.top() > item)
s.Min.push(item);
else
s.Min.push(s.Min.top());
s.data.push(item);
}
方法2:
节约了一点空间
还是俩个栈,但是数据栈和最小栈不在同步更新了。数据栈正常压入;而最小栈只有当 待压入元素小于 最小栈栈顶元素时才更新。数据栈正常弹出,最小栈只有当要弹出数据等于最小栈栈顶的时候才弹出。其余操作不变