class Node { public int value; public Node next; public Node(int v) { this.value = v; } @Override public String toString() { return "Node{" + "value=" + value + '}'; }}
/** * 用单链表实现堆栈 */public class SingleLinkedListStackDemo { public static void main(String[] args) { SingleLinkedListStack stack = new SingleLinkedListStack(5); String key; boolean loop = true; Scanner scanner = new Scanner(System.in); while (loop) { System.out.println("==================="); System.out.println("请输入下列指令"); System.out.println("show: 展示栈内容"); System.out.println("pop: 出栈"); System.out.println("push: 入栈"); System.out.println("peek: 栈顶元素"); System.out.println("exit: 退出程序"); System.out.println("==================="); key = scanner.next(); switch (key) { case "show": stack.show(); break; case "push": System.out.println("输入一个数"); int value = scanner.nextInt(); stack.push(value); break; case "peek": try { System.out.println("栈顶数值是: " + stack.peek()); } catch (Exception e) { System.out.println(e.getMessage()); } break; case "pop": try { int v = stack.pop(); System.out.println("出栈数值: " + v); } catch (Exception e) { System.out.println(e.getMessage()); } break; case "exit": scanner.close(); loop = false; break; default: break; } } System.out.println("Exit app successfully!"); }}class SingleLinkedListStack { private Node head; private int maxSize; private int size; public SingleLinkedListStack(int max) { head = new Node(-1); maxSize = max; size = 0; } public boolean isEmpty() { return size == 0; } public boolean isFull() { return size == maxSize; } public int peek() { if (isEmpty()) throw new RuntimeException("栈是空的,peek失败!"); return head.next.value; } public void push(int n) { if (isFull()) { System.out.println("栈满了,不能继续push!"); return; } Node node = new Node(n); node.next = head.next; head.next = node; size++; } public int pop() { if (isEmpty()) { throw new RuntimeException("栈是空的,pop失败!"); } int v = head.next.value; head.next = head.next.next; size--; return v; } public void show() { if (isEmpty()) { System.out.println("栈为空!show不出来!"); return; } show(head.next); } private void show(Node node) { if (node == null) return; System.out.println(node.value); show(node.next); }}