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是双向队列,既有队列的性质,也有栈的性质。

发布了6 篇原创文章 · 获赞 0 · 访问量 61
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览