Stack 类的简单实现 -- 《JAVA编程思想》50

Stack 是 JAVA 容器类中的一员,其特点是“后进先出”,即最后进入的元素最先取出来。

在这里插入图片描述

接下来一起看看如何简单的实现 Stack 容器,直接上实现代码,再依次分解。

public class LinkedStack<T> {
    
    


    //用于链接的Node节点
    private static class Node<T> {
    
    
        //具体存储的元素
        T item;
        //用于前后链接的Node节点
        Node<T> next;

        public Node() {
    
    
            this.item = null;
            this.next = null;
        }

        public Node(T item, Node<T> next) {
    
    
            this.item = item;
            this.next = next;
        }

        //判断当前节点是否为最后一个节点
        boolean end() {
    
    
            return item == null && next == null;
        }
    }

    //最外层的Node节点
    private Node<T> top = new Node<T>();

    //添加元素入栈
    public void push(T item) {
    
    
        top = new Node<>(item, top);
    }

    //移除元素出栈
    public T pop() {
    
    
        T result = top.item;
        if (!top.end()) {
    
    
            top = top.next;
        }
        return result;
    }

    public static void main(String[] args) {
    
    
        LinkedStack<String> lss = new LinkedStack<>();
        for (String s : "I am a software engineer".split(" ")) {
    
    
            lss.push(s);
        }
        String s;
        while ((s = lss.pop()) != null) {
    
    
            System.out.println(s);
        }
    }

}
engineer
software
a
am
I
  • 要点1
    容器类是用来存储对象的,我们无法预知具体用来存储什么类型的数据,所以需要使用泛型来代表需要存储的对象。

  • 要点2
    Stack 是线性数据结构,这里用内部类 Node 来链接前后元素,Node 包含两个内部属性,item 为当前需要存储的元素,next 为下一个需要链接的 Node 容器。
    在这里插入图片描述

每次调用 push() 让新元素入栈时,会生成一个新的 Node 节点,LinkedStack 中最外层的 top 指向新构建的 Node 节点。
在这里插入图片描述

每当调用 pop() 使元素出栈时,返回最后一个 Node 节点中的 item 元素,并移除最后一个 Node 节点,LinkedStack 中最外层的 top 指向前一个构建的 Node 节点。

在这里插入图片描述

  • 要点3
    本例中的 end() 方法使用了末端哨兵的设计理念,当 LinkedStack 中的 top 移动至末尾时,发现 item 和 next 属性都为空时,将禁止 top 引用向前移动。

本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。

若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!

Guess you like

Origin blog.csdn.net/BaymaxCS/article/details/120167690
Recommended