用单链表实现堆栈

3次阅读

共计 1904 个字符,预计需要花费 5 分钟才能阅读完成。

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);
    }
}
正文完
 0