本文共 6291 字,大约阅读时间需要 20 分钟。
请输入一个表达式
计算式:[722-5+1-5+3-3]点击计算【如下图】 请问:计算机底层是如何运算得到结果的?注意不是简单的把算式列出运算,因为我们看这个算式722-5,但是计算机怎么理解这个算式的(对计算机而言,它接收到的就是一个字符串),我们讨论的是这个问题。->栈package com.sukang.stack;import java.util.Scanner;/** * @description: 数组栈 * @author: sukang * @date: 2020-01-09 17:25 */public class ArrayStackDemo { public static void main(String[] args) { ArrayStack arrayStack = new ArrayStack(5); String key = ""; boolean loop = true; Scanner scanner = new Scanner(System.in); while (loop){ System.out.println("show: 显示栈列表"); System.out.println("push: 入栈"); System.out.println("pop: 出栈"); System.out.println("exit: 退出"); System.out.println("请输入你的选择:"); key = scanner.next(); switch (key){ case "show": arrayStack.list(); break; case "push": System.out.println("请输入一个需要入栈的数:"); int nub = scanner.nextInt(); arrayStack.push(nub); break; case "pop": try { int num = arrayStack.pop(); System.out.printf("出栈的数为:%d\n",num); } catch ( Exception e ) { e.printStackTrace(); } break; case "exit": loop = false; scanner.close(); break; default: break; } } System.out.printf("退出程序~~"); }}//定义一个数组的类class ArrayStack{ private int maxNub;//数组的最大容量 private int[] stack; //定义一个数组来充当栈 private int top = -1; //申明一个栈顶,默认为-1 public ArrayStack(int maxNub) { this.maxNub = maxNub; stack = new int[maxNub]; } //判断是否栈满 public boolean isFull(){ return top == maxNub - 1; } //判断是否栈空 public boolean isEmpty(){ return top == -1; } //往栈中添加一个数据 public void push(int num){ if(isFull()){ System.out.println("栈已经满了,不能再添加"); return; } top ++; stack[top] = num; } //从栈中取出数据 public int pop(){ if(isEmpty()){ throw new RuntimeException("栈已空,没法取数据"); } int temp = stack[top]; top --; return temp; } public void list(){ if(isEmpty()){ System.out.println("空栈!"); return; } int temp = top; while (true){ if(temp == -1){ System.out.println("栈已经遍历完了"); break; } System.out.printf("遍历数为%d\n",temp+1, stack[temp]); temp --; } }}
链表来模拟栈代码
package com.sukang.stack;import java.util.Scanner;import java.util.Stack;/** * @description: 链表实现栈 * @author: sukang * @date: 2020-01-10 10:05 */public class LinkedStackDemo { public static void main(String[] args) { LinkedStack linkedStack = new LinkedStack(); String key = ""; boolean loop = true; Scanner scanner = new Scanner(System.in); while (loop){ System.out.println("show: 显示栈列表"); System.out.println("push: 入栈"); System.out.println("pop: 出栈"); System.out.println("exit: 退出"); System.out.println("请输入你的选择:"); key = scanner.next(); switch (key){ case "show": linkedStack.list(); break; case "push": System.out.println("请输入一个需要入栈的数:"); int nub = scanner.nextInt(); Node node = new Node(nub); linkedStack.push(node); break; case "pop": try { Node node1 = linkedStack.pop(); System.out.println("出栈为:"+node1); } catch ( Exception e ) { e.printStackTrace(); } break; case "exit": loop = false; scanner.close(); break; default: break; } } System.out.printf("退出程序~~"); }}class LinkedStack{ private Node head = new Node(0); public void push(Node node){ Node temp = head; while (true){ if(temp.next == null){ break; } temp = temp.next; } temp.next = node; } public Node pop(){ if(head.next == null){ throw new RuntimeException("链表为空!"); } Node temp = head; while (true){ if(temp.next.next == null){ break; } temp = temp.next; } Node temp1 = temp.next; temp.next = temp.next.next; return temp1; } public void list(){ if(head.next == null){ System.out.println("空栈!"); return; } Stackstack = new Stack<>(); Node temp = head; while (true){ if(temp.next == null){ break; } stack.add(temp.next); temp = temp.next; } while (true){ if(stack.size() <= 0){ break; } System.out.println(stack.pop()); } }}class Node{ public int data; public Node next; public Node(int data){ this.data = data; } @Override public String toString() { return "Node["+data+"]"; }}
转载地址:http://ganti.baihongyu.com/