📘北尘_ :个人主页
🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心
文章目录 一、最小栈 二、栈的压入、弹出序列 三、逆波兰表达式求值
一、最小栈
1、题目讲解
2、思路讲解
3、代码实现
class MinStack {
public : MinStack ( ) { } void push ( int val) { st. push ( val) ; if ( minst. empty ( ) || st. top ( ) <= minst. top ( ) ) { minst. push ( val) ; } } void pop ( ) { if ( st. top ( ) == minst. top ( ) ) { minst. pop ( ) ; } st. pop ( ) ; } int top ( ) { return st. top ( ) ; } int getMin ( ) { return minst. top ( ) ; } stack< int > st; stack< int > minst;
} ;
二、栈的压入、弹出序列
1、题目讲解
2、思路讲解
3、代码实现
bool IsPopOrder ( vector< int > & pushV, vector< int > & popV) { stack< int > s; int pushi= 0 , popi= 0 ; for ( auto ch: pushV) { s. push ( pushV[ pushi] ) ; pushi++ ; while ( ! s. empty ( ) && s. top ( ) == popV[ popi] ) { s. pop ( ) ; popi++ ; } } return s. empty ( ) ; }
三、逆波兰表达式求值
1、题目讲解
2、思路讲解
3、代码实现
class Solution {
public : int evalRPN ( vector< string> & tokens) { stack< int > s; for ( auto & ch: tokens) { if ( ch== "+" || ch== "-" || ch== "*" || ch== "/" ) { int right= s. top ( ) ; s. pop ( ) ; int left= s. top ( ) ; s. pop ( ) ; switch ( ch[ 0 ] ) { case '+' : s. push ( left+ right) ; break ; case '-' : s. push ( left- right) ; break ; case '*' : s. push ( left* right) ; break ; case '/' : s. push ( left/ right) ; break ; } } else { s. push ( stoi ( ch) ) ; } } return s. top ( ) ; }
} ;