Featured image of post 计算机基础 数据结构与算法 栈

计算机基础 数据结构与算法 栈

🌏数据结构与算法实践 🎯 这篇文章用于记录有关 栈的实现 以及解题的分析和讲解视频

🎄java实现·接口定义

public interface Stack<E> {
    /**
     * 向栈顶压入元素
     *
     * @param value 待压入值
     * @return 压入成功返回 true, 否则返回 false
     */
    boolean push(E value);

    /**
     * 从栈顶弹出元素
     *
     * @return 栈非空返回栈顶元素, 栈为空返回 null
     */
    E pop();

    /**
     * 返回栈顶元素, 不弹出
     *
     * @return 栈非空返回栈顶元素, 栈为空返回 null
     */
    E peek();

    /**
     * 判断栈是否为空
     *
     * @return 空返回 true, 否则返回 false
     */
    boolean isEmpty();

    /**
     * 判断栈是否已满
     *
     * @return 满返回 true, 否则返回 false
     */
    boolean isFull();
}

🎄java实现·使用数组实现

package bigbigmeng.datastructures.stack;

/**
@author Liu Xianmeng
@createTime 2023/10/3 21:12
@instruction
*/

@SuppressWarnings({"all"})
public class ArrayStack<E> implements Stack<E> {
    private final E data[]; // 存储数据的数组
    private int top;  // 指向栈顶的指针
    private int capacity; // 容量

    /**
     * 构造函数传入栈的容量大小
     * @param capacity
     */
    public ArrayStack(int capacity){
        this.capacity = capacity;
        // 注意泛型不能直接被初始化 所以这里要先创建一个Object类型的数组
        // 然后对其强制类型转换
        data = (E[]) new Object[capacity];
        this.top = 0;
    }

    @Override
    public boolean push(E value) {
        // 如果容量已满则返回false
        if(top == capacity) return false;
        // 容量未满 执行压栈操作 返回true
        data[top++] = value;
        return true;
    }

    @Override
    public E pop() {
        // 如果栈为空 则直接返回null
        if(top == 0) return null;
        // 不为空 则弹出栈顶元素并返回
        return data[--top];
    }

    @Override
    public E peek() {
        if(top == 0) return null;
        return data[top - 1];
    }

    @Override
    public boolean isEmpty() {
        if(top == 0) return true;
        return false;
    }

    @Override
    public boolean isFull() {
        if(top == capacity) return true;
        return false;
    }

    @Override
    public int getSize() {
        return top;
    }
}

⚡测试

package bigbigmeng.datastructures.stack;

/**
@author Liu Xianmeng
@createTime 2023/10/3 21:33
@instruction
*/

@SuppressWarnings({"all"})
public class Test {
    public static void main(String[] args) {
        ArrayStack<Integer> stack = new ArrayStack<>(5);
        System.out.println("C Test M main() -> size = " + stack.getSize());
        stack.push(25);
        stack.push(56);
        stack.push(12);
        stack.push(89);
        System.out.println("C Test M main() -> pop = " + stack.pop());
        System.out.println("C Test M main() -> size = " + stack.getSize());
        /**
         * C Test M main() -> size = 0
         * C Test M main() -> pop = 89
         * C Test M main() -> size = 3
         */
    }
}

🎄java实现·使用链表实现