Java简单了解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;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值