先入后出的有序列表。可以使用数组模拟,需要数组maxSize,数组,还有表示栈顶的指针。
应用:计算中缀表达式。需要两个栈。一个数字栈一个符号栈。
package com.linzhongkai.stack;import java.util.LinkedList;public class CalcMidExp {public static void main(String[] args) {String str = "1+2*3+3/5-1";System.out.println(calcMidExp(str));}public static int calcMidExp(String str) {int res = 0;LinkedList<Integer> stackNum = new LinkedList<>();LinkedList<Character> stackChar = new LinkedList<>();char[] chars = str.toCharArray();for(char ch : chars) {//如果是数字if (Character.isDigit(ch)) {if (!stackChar.isEmpty()) {if (stackChar.getLast() == '*' ) {int num1 = ch-'0';int num2 = stackNum.removeLast();int chengfa = num1 * num2;stackNum.addLast(chengfa);stackChar.removeLast();} else if (stackChar.getLast() == '/') {int num1 = ch-'0';int num2 = stackNum.removeLast();int chufa = num2 / num1;stackNum.addLast(chufa);stackChar.removeLast();} else {stackNum.addLast(ch-'0'); //转换为数字}} else {stackNum.addLast(ch-'0'); //转换为数字}} else {stackChar.addLast(ch);}}while (!stackChar.isEmpty()) {char fuhao = stackChar.removeLast();if (fuhao == '+') {int num1 = stackNum.removeLast();int num2 = stackNum.removeLast();int jiafa = num1+num2;stackNum.addLast(jiafa);}if (fuhao == '-') {int num1 = stackNum.removeLast();int num2 = stackNum.removeLast();int jianfa = num2-num1;stackNum.addLast(jianfa);}}res = stackNum.getFirst();return res;}}
