什么是栈以及用数组实现一个栈-JAVA

虽然栈操作看起来比数组要简单的多,但对于计算机逻辑来说是非常重要的

我们在执行程序的的时候,可能会如下列伪代码一样在方法1里调用方法2,在方法2里调用方法3,执行完毕后一层一层的返回,这就是借助程序调用的系统栈来实现的

public void function1(){
	System.out.println(function2());
}
public Integer function2(){
	return function3();
}
public Integer function3(){
	return 233;
}

在1要执行2的时候将1的状态压入程序调用的系统栈,在2执行3的时候将2的状态压入程序调用的系统栈。当3执行完的时候将2的状态出栈,并获取到3的执行结果,然后继续执行2。当2执行完毕后将1的状态出栈,并获取到2的执行结果,然后继续执行1。

 用https://blog.csdn.net/test253506088/article/details/119538593编写的动态数组实现栈

/**
 * 栈需要实现的一些接口
 */
public interface Stack<E> {
    /**
     * 入栈
     *
     * @param e
     */
    public void push(E e);

    /**
     * 出栈,如果没有可出栈的返回null
     *
     * @return
     */
    public E pop();

    /**
     * 查看栈顶的值是什么,没有则返回null
     *
     * @return
     */
    public E peek();

    /**
     * 获取栈的大小
     *
     * @return
     */
    public Integer getSize();

    /**
     * 是否为空,空返回true
     *
     * @return
     */
    public Boolean isEmpty();
}

 具体实现

/**
 * 用数组的形式实现栈
 *
 * @param <E>
 */
public class ArrayStack<E> implements Stack<E> {
    private Array<E> array;//用的是002号文档里实现的动态数组

    /**
     * 创建时指定栈的容量
     *
     * @param capacity
     */
    public ArrayStack(Integer capacity) {
        array = new Array<>(capacity);
    }

    /**
     * 未指定栈的容量默认为20
     */
    public ArrayStack() {
        this(20);
    }

    @Override
    public void push(E e) {
        try {
            array.putFirst(e);
        } catch (Exception e1) {
            e1.printStackTrace();
        }
    }

    @Override
    public E pop() {
        E buffer = null;
        try {
            buffer = array.getLast();
            array.deleteLast();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return buffer;
        }
    }

    @Override
    public E peek() {
        E buffer = null;
        try {
            buffer = array.getLast();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return buffer;
        }
    }

    @Override
    public Integer getSize() {
        return array.getSize();
    }

    @Override
    public Boolean isEmpty() {
        return array.isEmpty();
    }

    @Override
    public String toString() {
        String buffer = "";
        Integer size = array.getSize();
        try {
            for (Integer i = 0; i < size; i++) {
                buffer += array.get(i).toString();
                if (i != size - 1)
                    buffer += ", ";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 最右边的值是栈顶
        return "Size:" + size + "\tArrayStack[" + buffer + "]";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值