Java-链式栈

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34975710/article/details/77847221

上一篇介绍了顺序栈,主要是通过数组来存储数据,因为数组在内存中是连续的。除了顺序栈,还可有链式栈,链式栈中的结点元素除了对应存储的数据,还会包含下一个结点的地址。
这里写图片描述

一、创建结点类

相比与顺序栈,链式栈是通过结点类保存数据,每一个存储的数据就是一个结点对象,主要包含两个属性:数据和下一个结点的地址。

创建节点类,采用泛型:

public class Node<T> {
    private Node node;
    private T data;

    public Node(T data) {
        this.data = data;
    }

    public T getData() {
        return data;
    }

}

二、创建链式栈类

具体逻辑与顺序栈类似,代码中都有注释。

public class LinkStack<T> {
    private Node top;
    private int size;

    public LinkStack(){
        top = null;
    }

    /**
     * 压栈
     * @param data
     */
    public void push(T data){
        Node<T> node = new Node<T>(data);
        if(top == null){
            top = node;
        }else{
            // 新节点的next为旧的栈顶
            node.setNext(top); 
            // 栈顶设置为新节点对象
            top = node;
        }
        size++;
    }

    /**
     * 查看栈顶元素
     * @return
     */
    public T peek(){
        if(top == null){
            throw new RuntimeException("栈为空");
        }else{
            return (T) top.getData();
        }
    }

    /**
     * 出栈
     * @return
     */
    public T pop(){
        if(top == null){
            throw new RuntimeException("栈为空");
        }else{
            Node<T> oldNode = top;
            // 栈顶向下移
            top = oldNode.getNext();
            // help GC,释放内存
            oldNode.setNext(null); 
            size--;
            return (T) oldNode.getData();
        }
    }

    public int size(){
        return size;
    }
}

测试如下:

public static void main(String[] args) {

        LinkStack<String> stack = new LinkStack<String>();

        stack.push("你好1");
        stack.push("你好2");
        stack.push("你好3");
        stack.push("你好4");
        stack.push("你好5");

        System.out.println("栈顶:" + stack.peek());
        System.out.println("size = " + stack.size());
        System.out.println("===========楚河汉界=============");
        System.out.println("出栈:" + stack.pop());
        System.out.println("栈顶:" + stack.peek());
        System.out.println("size = " + stack.size());
    }
栈顶:你好5
size = 5
===========楚河汉界=============
出栈:你好5
栈顶:你好4
size = 4

好了,链式栈就介绍到这里。


生活不只是敲代码,如果你或你身边的人喜欢摄影或者生活的点点滴滴,可以关注下面的公众号~
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34975710/article/details/77847221