当前位置: 首页 > news >正文

栈及相关算法问题

文章目录

链表实现栈

private class Node<E> {E value;Node<E> next;public Node(E value, Node<E> next) {this.value = value;this.next = next;}
}

数组实现栈

private E[] array;
private int top=0;

利用栈解决算法问题
力扣-有效的括号
解题思路
在这里插入图片描述

import java.util.*;
class Solution {public boolean isValid(String s) {LinkedList<Character> stack=new LinkedList<>();char[] a=s.toCharArray();for(int i=0;i<a.length;i++){if(a[i]=='(')stack.push(')');else if(a[i]=='[')stack.push(']');else if(a[i]=='{')stack.push('}');else{if(stack.isEmpty()||a[i]!=stack.peek())return false;else stack.poll();}}if(stack.isEmpty())return true;return false;}
}

逆波兰表达式的运算值
在这里插入图片描述

解题思路
在这里插入图片描述

用栈解决

import java.util.*;
class Solution {public int evalRPN(String[] tokens) {LinkedList<Integer> stack=new LinkedList<>();for(int i=0;i<tokens.length;i++){if("+".equals(tokens[i])||"*".equals(tokens[i])||"-".equals(tokens[i])|"/".equals(tokens[i])){int b=stack.poll();int a=stack.poll();int result=choice(tokens[i],a,b);stack.push(result);}else {int a=Integer.parseInt(tokens[i]);stack.push(a);}}if(stack.isEmpty())return 0;return stack.poll();}public static int choice(String c,int a,int b){if("+".equals(c))return a+b;else  if("-".equals(c))return a-b;else if("*".equals(c))return a*b;else if("/".equals(c)){if(b==0) return 0;else return a/b;}return 0;}
}

中缀运算转后缀运算
思路
在这里插入图片描述

代码实现

String s="a*(b+c)";LinkedList<Character> stack=new LinkedList<>();StringBuffer sb=new StringBuffer();for(int i=0;i<s.length();i++){char c=s.charAt(i);switch (c){case '+','-','*','/':{if(stack.isEmpty())stack.push(c);else{if(priority(c)>priority(stack.peek()))stack.push(c);else {while(!stack.isEmpty()&&priority(c)<=priority(stack.peek()))sb.append(stack.poll());stack.push(c);}}}break;case '(':stack.push(c);break;case ')':{while(!stack.isEmpty()&&stack.peek()!='(') {sb.append(stack.poll());}stack.poll();}break;default:{sb.append(c);}}}while(!stack.isEmpty()){sb.append(stack.poll());}System.out.println(sb);
}
public static int  priority(char s)
{switch (s){case '*','/': return 2;case '+','-':return 1;case '(':return 0;}return 0;
}
http://www.dtcms.com/a/502910.html

相关文章:

  • Docker镜像分层与写时复制原理详解
  • 药物靶点研究3天入门|Day1:从疾病差异里挖“潜力靶点”,两步锁定真目标
  • WebForms ArrayList详解
  • 达梦数据库性能调优总结
  • [JavaEE初阶]HTTPS-SSL传输过程中的加密
  • 单片机开发中裸机系统有哪些(轮询、时间片、前后台.....)
  • 一次线上MySQL分页事故,搞了半夜...
  • 医院网站建设思路深圳展览设计公司
  • C#WPF关键类
  • 从文件加密到数据料理台:两款主流加密工具(EncFSMP/CyberChef)技术特性解析与开发实战选型
  • 什么是uv和传统的区别
  • FastAPI之 处理HTTP请求
  • 【2025-系统规划与管理师】第十章:云原生系统规划
  • 求一个矩阵中的鞍点
  • 《计算机视觉度量:从特征描述到深度学习》-- 大模型应用开发基础RAG方案介绍
  • 【C++】list的使用及底层逻辑实现
  • 网站开发的整体职业规划购物网站多少钱
  • 【JVM】线上JVM堆内存报警,占用超90%
  • 【JVM系列】-第1章-JVM与Java体系结构
  • 鸿蒙NEXT Wear Engine穿戴侧应用开发完全指南
  • OpenHarmony 与 HarmonyOS 的 NAPI 开发实战对比:自上而下与自下而上的差异解析
  • openHarmony之DSoftBus分布式软总线智能链路切换算法
  • TensorFlow2 Python深度学习 - 循环神经网络(GRU)示例
  • TVM | Relay
  • 使用 Conda 安装 QGIS 也是很好的安装方式
  • 网站套餐到期什么意思抖音seo优化系统招商
  • 怎么看网站pr值衡水市住房和城乡建设局网站
  • 散点拟合圆:Matlab两种方法实现散点拟合圆
  • Kubernetes流量管理:从Ingress到GatewayAPI演进
  • 专做品牌网站西安做网站电话