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

Java-数构栈与队列

1.栈(Stack)

1.1概念

栈是一种特殊的线性表,其只允许在固定的一段进行插入和删除元素操作。进行数据插入和删除的操作的一段称为栈顶,请一段称为栈底。栈中元素遵循后进先出的原则。

压栈:栈的插入操作叫做进栈/入栈/压栈,输入的数据在栈顶。

出栈:栈的删除操作叫做出栈。

1.2栈的初始化

    public static void main(String[] args) {Stack<Integer>s=new Stack<>();s.push(1);s.push(2);s.push(3);s.push(4);}

1.3栈的模拟实现:

import java.util.Arrays;public class Mystack {private int[] elem;private int usedSize;private static final int DEFUALT_CAPACITY=10;public Mystack(int[] elem) {this.elem = new int[DEFUALT_CAPACITY];}public void push(int val){if(isFull()){elem= Arrays.copyOf(elem,2*elem.length);}elem[usedSize]=val;usedSize++;}private boolean isFull(){return usedSize==elem.length;}public int  pop(){if(isEmpty()){throw new EmptyException("栈内为空");}int oldVal=elem[usedSize-1];usedSize--;return oldVal;}private boolean isEmpty(){return usedSize==0;}public int peek(){if (isEmpty()){throw new EmptyException("栈内为空");}return elem[usedSize-1];}
}

20. 有效的括号 - 力扣(LeetCode)

class Solution {public boolean isValid(String s) {Stack<Character> stack=new Stack <>();for(int i =0;i<s.length();i++){char ch=s.charAt(i);//获取每个字符if(ch=='('||ch=='['||ch=='{'){stack.push(ch);//满足条件的再压入栈}else{if(stack.empty()){return false;//代表第一个元素是右括号无法匹配}char top=stack.peek();if((ch==')'&&top=='(')||(ch==']'&&top=='[')||(ch=='}'&&top=='{')){stack.pop();}else{return false;}//不匹配的返回}}if(!stack.empty()){return false;//最后栈中还有左括号没有被匹配}return true;}
}

150. 逆波兰表达式求值

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack=new Stack<>();for(String s:tokens){if(isInteger(s)){stack.push(Integer.parseInt(s));}else{int num1=stack.pop();//右边int num2=stack.pop();//左边switch(s){case"+":stack.push(num1+num2);break;case"-":stack.push(-num1+num2);break;case"*":stack.push(num1*num2);break;case"/":stack.push(num2/num1);break;}}}return stack.pop();}private boolean isInteger(String s){if(s.equals("+")||s.equals("-")||s.equals("*")||s.equals("/")){return false;}return true;}
}
import java.util.Stack;public class MinStack {private Stack<Integer> stack;private Stack<Integer> minStack;public MinStack() {stack=new Stack<>();minStack=new Stack<>();}public void push(int val) {stack.push(val);if(minStack.empty()){minStack.push(val);}else {if(val<=minStack.peek()){minStack.push(val);}}}public void pop() {if(!stack.empty()){int ret=stack.pop();if(minStack.peek()==ret){minStack.pop();}}}
//获取正常栈顶元素public int top() {if(stack.empty()){return -1;}return stack.peek();}public int getMin() {if(minStack.empty()){return -1;}return minStack.peek();}
}/*** Your MinStack object will be instantiated and called as such:* MinStack obj = new MinStack();* obj.push(val);* obj.pop();* int param_3 = obj.top();* int param_4 = obj.getMin();*/
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param pushV int整型一维数组* @param popV int整型一维数组* @return bool布尔型*/public boolean IsPopOrder(int[] pushA,int[] popA){Stack<Integer> stack=new Stack<>();int j=0;for (int i = 0; i < pushA.length; i++) {stack.push(pushA[i]);while(!stack.empty()&&j< popA.length&&stack.peek()==popA[j]){stack.pop();j++;}}return stack.empty();}
}

 

http://www.dtcms.com/a/282741.html

相关文章:

  • 第三次mysql作业
  • C# 8.0 创建一个简单的控制台应用程序
  • Python 进阶学习之全栈开发学习路线
  • 电力名词通俗解析5:计量系统
  • 电力名词通俗解析4:电网DCS与SCADA系统通俗解释
  • adb性能测试命令
  • State
  • PXE实现Ubuntu,rockylinux,almalinux全自动安装
  • Apache CXF 漏洞曝光:存在拒绝服务与数据泄露双重风险
  • HTTP性能优化汇总
  • 分布式光伏气象站:光伏产业的智慧守护者
  • linux系统离线升级git版本 git-2.36.1
  • [特殊字符] CentOS 7 离线安装 MySQL 5.7 实验
  • 【PTA数据结构 | C语言版】列出叶结点
  • vivo S30评测:用设计诠释科技,以性能书写情怀
  • MybatisPlus-11.IService的批量新增
  • 坐标系和相机标定介绍,张正友标定法原理,opencv标定
  • keepalived+Haproxy 高可用配置
  • 中科米堆CASAIM-IM自动化3D扫描系统扫描电脑主机背板产品外观尺寸
  • Apache RocketMQ + “太乙” = 开源贡献新体验
  • Java 大视界 -- 基于 Java 的大数据分布式存储在云计算数据中心数据管理与调度中的应用(348)
  • Web前端:JavaScript和CSS实现的基础登录验证功能
  • k8s集群搭建
  • 【AI智能体】Dify 基于知识库搭建智能客服问答应用详解
  • Redis分布式锁深度剖析:从原理到高可用实践
  • MongoDB复杂查询 聚合框架
  • 个人笔记(linux/sort与uniq命令)
  • ETL还是ELT,大数据处理怎么选更靠谱?
  • GIT : early EOF invalid index-pack output
  • Jmeter socket接口测试