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);
    }
}

proheart
41 声望20 粉丝

Developer, Java & Android