package com.prolog.api.webservicetest;/* * @auther 顶风少年 * @mail dfsn19970313@foxmail.com * @date 2020-01-02 11:41 * @notify * @version 1.0 */ import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Stack { private ArrayList<String> stackList = new ArrayList<>(); //添加元素到栈顶 public void add(String... integers) { List<String> integers1 = Arrays.asList(integers); stackList.addAll(integers1); } //弹出栈顶元素 public String popup() { if (stackList.size() == 0) { return "-1"; } return stackList.remove(stackList.size() - 1); } //返回栈顶元素,不是弹出 public String getTop() { if (stackList.size() == 0) { return "-1"; } return stackList.get(stackList.size() - 1); } //判断栈是否为空 public boolean isEmpty() { return stackList.isEmpty(); } //返回栈内元素个数 public Integer getSize() { return stackList.size(); } //清空栈 public void clearStack() { stackList.clear(); } }
需要注意的是,弹栈和获取栈顶元素时,需要判断栈内是否有元素,否则会抛出异常。
栈的应用
1 从字符串中判断某个字符是否是成对出现的。
//应用场景:设括号必须成对出现。用栈互相抵消 @Test public void t1() throws Exception { Stack stack = new Stack(); String str = "(a+b)*(a-c)"; //循环字符串 for (int i = 0; i < str.length(); i++) { //拿到字符串的每一个元素 String s = String.valueOf(str.charAt(i)); if (s.equals("(")) {//如果是 ( 则压栈 stack.add(s); } else if (s.equals(")")) { //如果是 )则判断当前栈内是否有元素,如果没有则说明有问题 if (stack.isEmpty()) { System.out.println("字符串不合法"); return; } else { //当前栈有元素只可能是 ( 此时弹出 stack.popup(); } } } System.out.println("字符串合法"); }
原文:https://www.cnblogs.com/zumengjie/p/12133370.html