栈的介绍和使用(算法)

栈最大的特点是先进先出。利用这个特点应用于我们的日常生活会有很大的便利。下面我们一起来看看吧。

class Solution {

public:

int calculate(string s) {

//用数组来模拟栈

vector<int> st;

int i=0,n=s.size();

char op='+';

while(i<n){

if(si==' ') i++;

else if(si>='0'&&si<='9'){

int tmp=0;

while(i<n&&si>='0'&&si<='9')

tmp=tmp*10+(si++-'0');

if(op=='+') st.push_back(tmp);

else if(op=='-') st.push_back(-tmp);

else if(op=='*') st.back()*=tmp;

else st.back()/=tmp;

}else{

op=si;

i++;

}

}

int sum=0;

for(auto e: st){

sum+=e;

}

return sum;

}

};

class Solution {

public:

string decodeString(string s) {

stack<int> nums;

stack<string> st;

st.push("");

int i=0,n=s.size();

while(i<n){

if(si>='0'&&si<='9'){

int tmp=0;

while(si>='0'&&si<='9'){

tmp=tmp*10+(si++-'0');

}

nums.push(tmp);

}else if(si=='['){

i++;

string tmp="";

while(si>='a'&&si<='z'){

tmp+=si++;

}

st.push(tmp);

}else if(si==']'){

string tmp=st.top();

st.pop();

int k=nums.top();

nums.pop();

while(k--){

st.top()+=tmp;

}

i++;

}else{

string tmp;

while(i<n&&si>='a'&&si<='z'){

tmp+=si++;

}

st.top()+=tmp;

}

}

return st.top();

}

};

class Solution {

public:

bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {

int n=popped.size();

stack<int> result;

int i=0;

for(auto e: pushed){

result.push(e);

while(result.size()&&result.top()==poppedi){

result.pop();

i++;

}

}

return i==n;

}

};

相关推荐
Highcharts.js7 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
拳里剑气10 小时前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先
wanderist.12 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
稚南城才子,乌衣巷风流12 小时前
支配树(Dominator Tree)详解:概念、算法与应用
算法
稚南城才子,乌衣巷风流13 小时前
动态开点:原理、实现与应用场景
数据结构·算法
yyds_yyd_1008613 小时前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
KaMeidebaby14 小时前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
geovindu15 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
ekkoalex16 小时前
训练框架以及算法实现的框架
算法