简单了解Stack--顺序存储结构和手写链式存储结构

顺序存储结构

Stack Vector 入栈 出栈 查询 用的也是数组 继承的是Vector,而Vector继承的是abstractList.同时ArrayList和LinkedList都继承自abstractList
Stack的方法 都是使用了顺序存储结构
push
这里写图片描述
在数组中添加新数据
这里写图片描述
pop 实质调用peek()方法,获取最新的元素
这里写图片描述
应该不能执行System.arraycopy()方法。 而是直接赋值为null
这里写图片描述
peek
这里写图片描述
这里写图片描述
这里写图片描述
empty 这是判空语句,而不是置空语句
这里写图片描述
search
这里写图片描述
这里写图片描述
这里写图片描述

很遗憾,系统中没有提供栈的链式存储结构。
手写栈的链式存储结构

public class StackNode {
    public Object data;
    public StackNode prv;
    public StackNode next;

    public StackNode(StackNode prv, Object data, StackNode next) {
        this.data = data;
        this.prv = prv;
        this.next = next;
    }
}


public class LinkedStack {

    private StackNode firstNode;
    private int size = 0;

    public void push(Object e) {
        StackNode newStackNode = new StackNode(firstNode, e, null);
        if (firstNode == null) {
            firstNode = newStackNode;
        } else {
            firstNode.next = newStackNode;
            newStackNode.prv = firstNode;
            firstNode = newStackNode;
        }
        size++;
    }

public Object pop() {
    Object data = null;
    if (firstNode != null) {
        if (firstNode.prv != null) {
            StackNode temp = firstNode.prv;
            data = firstNode.data;
            firstNode.prv = null;
            firstNode = null;
            temp.next = null;
            firstNode = temp;
        } else {
            firstNode.data = null;
            firstNode = null;
        }

        size--;
    }
    return data;
}

public boolean clear() {
    if (firstNode != null) {
        while (firstNode.prv != null) {
            StackNode temp = firstNode.prv;
            firstNode.data = null;
            firstNode.prv = null;
            firstNode = null;
            temp.next = null;
            firstNode = temp;
            size--;
        }
        firstNode.data = null;
        firstNode = null;
        size--;
    }

    return true;
}

public int getSize(){
    return size;
}

}

猜你喜欢

转载自blog.csdn.net/yuezheyue123/article/details/81076331