c++最小栈设计并实现一个MinStack类
时间: 2024-01-23 12:04:04 浏览: 90
以下是使用C++实现最小栈的示例代码:
```
#include <iostream>
#include <stack>
using namespace std;
class MinStack {
private:
stack<int> s;
stack<int> min_s;
public:
void push(int x) {
s.push(x);
if (min_s.empty() || x <= min_s.top()) {
min_s.push(x);
}
}
void pop() {
if (s.top() == min_s.top()) {
min_s.pop();
}
s.pop();
}
int top() {
return s.top();
}
int getMin() {
return min_s.top();
}
};
int main() {
MinStack s;
s.push(2);
s.push(0);
s.push(3);
s.push(1);
cout << s.getMin() << endl; // 0
s.pop();
s.pop();
cout << s.top() << endl; // 0
cout << s.getMin() << endl; // 0
return 0;
}
```
在这个示例中,我们定义了一个`MinStack`类来表示最小栈,其中包含两个栈`s`和`min_s`。`s`用于存储数据,`min_s`用于存储当前栈中最小的元素。
在`push`函数中,我们首先将元素压入`s`栈中,然后判断`min_s`栈是否为空,或者当前元素是否小于等于`min_s`栈顶元素。如果是,我们就将该元素压入`min_s`栈中。
在`pop`函数中,我们首先判断`s`栈顶元素是否等于`min_s`栈顶元素。如果是,我们就将`min_s`栈顶元素弹出。然后我们再将`s`栈顶元素弹出即可。
在`top`函数中,我们直接返回`s`栈顶元素。
在`getMin`函数中,我们直接返回`min_s`栈顶元素。
最后,我们在`main`函数中测试了一下`MinStack`类的功能。可以看到,我们成功地实现了最小栈,并且可以在常数时间内获取最小值。
阅读全文