Java数据结构之Stack(栈)

Stack(栈)

Stack(栈)是一种特殊的线性表,它只允许在栈顶(top)进行增删操作。栈是一种操作受限制的线性表。即:LIFO(Last In, First Out)。
在这里插入图片描述

Stack常见的方法

// 压栈
E push(E e);
// 出栈
E pop();
// 获取栈顶元素,不出栈
E peek();
// 判断栈是否为空
boolean empty();

自己实现一个Stack(ArrayList实现)

public class MyArrayStack<E> {

    private List<E> stackList;

    private static final int DEFAULT_CAPACITY = 10;

    public MyStack(){
        this(DEFAULT_CAPACITY);
    }

    public MyStack(int capacity){
        stackList = new ArrayList<>(capacity);
    }

    // 压栈
    public E push(E e){
        stackList.add(e);
        return e;
    }
    // 出栈
    public E pop(){
        ensureCapacity();
        return stackList.remove(stackList.size() - 1);
    }
    // 获取栈顶元素,不出栈
    public E peek(){
        ensureCapacity();
        return stackList.get(stackList.size() - 1);
    }
    // 判断栈是否为空
    public boolean empty(){
        return stackList.isEmpty();
    }

    private void ensureCapacity(){
        if (empty()){
            throw new IllegalArgumentException("Illegal Capacity: " + stackList.size());
        }
    }

}

自己实现一个Stack(LinkedList实现)

public class MyLinkedStack<E> {

    private LinkedList<E> stackList = new LinkedList<>();

    // 压栈
    public E push(E e){
        stackList.addLast(e);
        return e;
    }
    // 出栈
    public E pop(){
        return stackList.removeLast();
    }
    // 获取栈顶元素,不出栈
    public E peek(){
        return stackList.getLast();
    }
    // 判断栈是否为空
    public boolean empty(){
        return stackList.isEmpty();
    }

}

对于Stack的数据结构,因为它是在栈顶进行增删操作,所以使用数组或链表都可以,时间复杂度均为O(1),但是数组的性能最好。

废弃

在Java的java.util包下,提供了栈的实现:java.util.Stack。但是官方不建议使用此类来实现栈的相关操作。

Java官方建议使用双向队列Deque来实现栈的相关操作:

Deque<Integer> stack = new ArrayDeque<>();

Deque是双向队列,既有队列的性质,也有栈的性质。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值