设计思路

栈这种数据结构实现起来非常简单,主要有以下几个方法

  • push()
  • pop()
  • peek()
  • size()
  • isEmpty()

考虑一个问题,栈算是一种操作受限的线性表,那我们为什么还要用栈,而不是直接用链表或者数组或者什么别的数据结构,反正栈内部也是用了这些数据结构实现的?

这个问题可以这么考虑:

暴露的接口越多,操作越灵活,程序就更加的不可控

所以,使用栈的目的就是让你只关心与栈相关的代码逻辑的实现,而不去考虑一些别的,毕竟你既然选用了栈这种数据结构,就代表问题很时候用栈解决

顺序栈

这里我们基于ArrayList来实现一个顺序栈

/**
 * @Classname ArrayListStack
 * @Description 顺序栈
 * @Date 2019/12/14 12:39
 * @Created by SunCheng
 */
public class ArrayListStack<E>{
    ArrayList<E> data;

    public ArrayListStack() {
        data = new ArrayList<>();
    }
    
    public int size() {
        return data.size();
    }
    
    public void push(E e) {
        data.add(e);
    }
    public E pop() {
        if (isEmpty()) {
            throw new IllegalStateException("the stack is empty");
        }
        return data.remove(data.size()-1);
    }

    public boolean isEmpty() {
        return data.isEmpty();
    }

    public E peek(){
        return data.get(data.size() - 1);
    }
}

链式栈

这里我们基于LinkedList来实现一个链式栈

/**
 * @Classname LinkedListStack
 * @Description 链式栈
 * @Date 2019/12/14 12:42
 * @Created by SunCheng
 */
public class LinkedListStack<E> {
    LinkedList<E> data;

    public LinkedListStack() {
        data = new LinkedList<>();
    }

    public int size(){
        return data.size();
    }

    public boolean isEmpty(){
        return data.isEmpty();
    }

    public void push(E e) {
        data.addLast(e);
    }

    public E pop() {
        return data.removeLast();
    }

    public E peek(){
        return data.get(data.size() - 1);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值