目录
欢迎
1.stack
1.1stack的介绍
cplusplus.com/reference/stack/stack/?kw=stack
1.2stack的使用
接口 | 说明 |
stack() | 构造空的栈 |
empty() | 检测stack是否为空 |
size() | 返回stack中元素的个数 |
top() | 返回栈顶元素的引用 |
push() | 将元素val压入stack中 |
pop() | 将stack中尾部的元素弹出 |
练习题:
class MinStack {
public:
MinStack() {
}
void push(int val) {
_st.push(val);
if(_minst.empty() || val<=_minst.top())//比较,如果小于当前最小值,则插入_minst中
_minst.push(val);
}
void pop() {
if(_st.top() == _minst.top())//如果相等,两个栈一起删除该数据
_minst.pop();
_st.pop();
}
int top() {
return _st.top();
}
int getMin() {
return _minst.top();//返回最小栈的栈顶数据,即最小元素
}
private:
stack<int> _st;
stack<int> _minst;//辅助栈(最小栈):将当前val与栈顶数据比较,将最小值入栈,即记录当前最小值
};
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pushV int整型vector
* @param popV int整型vector
* @return bool布尔型
*/
bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {
// write code here
size_t pushi = 0, popi = 0;
stack<int> st;
while (pushi < popV.size())
{
st.push(pushV[pushi++]);//1.先入栈pushi位置的数据
while (!st.empty() && popV[popi] == st.top())
//栈顶数据跟popi位置序列数据比较,如果匹配则出栈,popi++
//如果不匹配继续入栈
{
popi++;
st.pop();
}
}
return st.empty();//如果匹配则栈为空,不匹配栈不为空
}
};
#include <vector>
#include <stack>
#include <string>
class Solution {
public:
// 定义函数 evalRPN,接收一个存储字符串的向量 tokens 作为参数,返回逆波兰表达式的计算结果
int evalRPN(vector<string>& tokens) {
// 创建一个整数类型的栈 s,用于存储操作数
stack<int> s;
// 使用范围 for 循环遍历 tokens 向量中的每个字符串元素,str 是对当前元素的引用
for(auto& str : tokens) {
// 检查当前字符串是否为运算符(+、-、*、/)
if("+" == str || "-" == str || "*" == str || "/" == str) {
// 若为运算符,从栈中弹出栈顶元素作为右操作数
int right = s.top();
s.pop();