美文网首页
Java 使用泛型实现栈数据结构

Java 使用泛型实现栈数据结构

作者: 程序员汪汪 | 来源:发表于2021-04-10 23:46 被阅读0次

使用泛型,实现栈数据结构(本例为链式栈)。

栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行插入和删除操作,允许操作的一端称为栈顶,不允许操作的称为栈底。

链式栈的内部是链式存储的,我们现在自己来实现链式存储机制。

直接看代码:

public class CustomStack<T> {
    private static class Node<U> { // 节点,由入栈元素和元素的地址组成
        U item; // 入栈的元素
        Node<U> next; // 下一个元素的地址

        Node() { item = null; next = null; }

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

        boolean end() { // 末端表示,判断是否为空栈。
            return item == null && next == null;
        }
    }

    private Node<T> top = new Node<>();  // 栈顶

    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) {
        CustomStack<String> lss = new CustomStack<>();
        for (String s : "Phasers on stun!".split(" ")) {
            lss.push(s);
        }
        String str;
        while ((str = lss.pop()) != null) {
            System.out.println(str);
        }
    }

}

CustomStack<String> lss = new CustomStack<>();创建完CustomStack对象,在内存中就存在了一个top节点,此时的栈只有一个top节点,并且是一个用来作为栈顶的空节点,foreach循环开始,将"Phasers on stun!"按空格拆分成String数组,调用push()方法进行压栈,每一次压栈,都将上一个Node的内存地址保存到自身的next属性中,循环结束,就形成了一个链式的栈结构。

压栈图示:

压栈

while循环中调用pop()方法进行出栈,出栈时,先将节点中的item值取出,随后调用end()方法判断是否到达栈顶,若没有到达栈顶,就将当前节点的内存地址,修改为位于自己前面的节点的地址,到达栈顶时,栈中节点全部出栈,只会留下栈顶一个空的节点。

出栈图示:

出栈

相关文章

  • Java 使用泛型实现栈数据结构

    使用泛型,实现栈数据结构(本例为链式栈)。 栈是一种运算受限的线性表,是一种先进后出的数据结构,限定只能在一端进行...

  • swift泛型

    泛型 泛型可以将类型参数化,提高代码复用率,减少代码量 使用泛型实现栈 关联类型(Associated Type)...

  • 泛型(Generics)

    泛型可以将类型参数化,提高代码服用率,减少代码 类实现栈结构 结构体实现栈结构 结构体关联值使用泛型 关联类型(A...

  • Java自学-泛型 支持泛型的类

    Java 如何设计支持泛型的类 步骤 1 : 不支持泛型的Stack 以Stack栈为例子,如果不使用泛型当需要一...

  • 死磕Java泛型(一篇就够)

    Java泛型,算是一个比较容易产生误解的知识点,因为Java的泛型基于擦除实现,在使用Java泛型时,往往会受到泛...

  • Kotlin-泛型和委托

    泛型 泛型的使用是为了程序有更好的扩展性。泛型类和泛型方法 泛型的高级特性java的泛型是通过类型擦除机制来实现的...

  • ★13.泛型

    关于泛型 静态方法无法访问泛型的类型参数。(C++可以) Java泛型使用擦除实现,如运行时,List ,List...

  • 泛型依赖注入

    泛型依赖注入 1.定义泛型 Java代码: 2.实现基类,声明泛型 Java代码: xml代码:

  • JAVA泛型和类型擦除

    什么是类型擦除 Java是使用擦除来实现泛型的。使用泛型后在运行时任何具体的类型信息都被擦除了,关于泛型的处理都是...

  • Android面试题总结(题目+复习链接)

    数据结构 1.栈实现原理 java数据结构与算法之栈(Stack)设计与实现 - CSDN博客 2.链表实现原理 ...

网友评论

      本文标题:Java 使用泛型实现栈数据结构

      本文链接:https://www.haomeiwen.com/subject/aymokltx.html