数据结构 栈

嘿,小伙伴们,今天我们来聊聊计算机中数据结构中的栈。

介绍

概念

首先,让我们来看看栈是什么。栈是一种后进先出(LIFO)的数据结构,它可以存储一系列的元素,每个元素只能在栈顶进行访问和修改。栈通常用于实现递归算法、函数调用等场景。

优缺点

那么,栈有哪些优缺点呢?优点是它非常适合实现递归算法,因为每次递归调用都会将新的参数压入栈中,直到递归结束时再将结果弹出。此外,栈的空间利用率也非常高,因为每个元素都只能在栈顶进行访问和修改。缺点是栈的插入和删除操作需要O(n)的时间复杂度,因此在处理大量数据时可能会比较慢。

使用场景

接下来,我们来看看栈的应用场景。栈通常用于实现递归算法、函数调用等场景。例如,计算阶乘就是一个典型的递归算法,可以使用栈来实现。此外,栈还可以用于实现表达式求值、括号匹配等场景。

ArrayStack.png

设计

/**
 * @author sssd
 * @careate 2023-07-09-5:53
 */
public interface Stack<E> {
    
    void push(E e); //压栈

    E pop();//出栈

    E peek();//查看

    int getSize();

    boolean isEmpty(); //是否为空
}

实现

数组实现

/**
 * @author sssd
 * @careate 2023-07-09-6:06
 */
public class ArrayStack<E> implements Stack<E> {

    private ArrayList<E> arrayList;

    public ArrayStack(int capacity){
        arrayList = new ArrayList<>(capacity);
    }

    public ArrayStack(){
        arrayList = new ArrayList<>();
    }

    @Override
    public void push(E e) {
        arrayList.addLast(e);
    }

    @Override
    public E pop() {
        return arrayList.removeLast();
    }

    @Override
    public E peek() {
        return arrayList.getLast();
    }

    @Override
    public int getSize() {
        return arrayList.getSize();
    }

    @Override
    public boolean isEmpty() {
        return arrayList.isEmpty();
    }

}

作者:傻傻三多

出处:https://www.sssd.top/archives/1688033050884

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

本文由博客一文多发平台 OpenWrite 发布!


sssd
1 声望0 粉丝