java 栈_数据结构|用java自己手写实现一个栈

javaDEMO

本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~ https://www.javastudy.cloud

用java实现一个栈

栈主要有以下特性和操作:1.先进后出2.有入栈和出栈的操作因为我们demo中也只先完成这两个简单的特性和操作代码如下:

/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/6 **/public class StackDemo {    /** 底层使用一个泛型数组做存储 */    private E[] items;    private int top;    private int capacity;    public StackDemo() {        //会调用下面一个构造方法,初始化一个长度为10的数组        this(10);    }    public StackDemo(int i){        this.capacity=i;        this.items=(E[])new Object [this.capacity];        this.top=0;    }    /**     * 入栈操作     */    public void push(E e) throws Exception{        if(top!=capacity){            items[top++]=e;            //判断数据是不是已经满了,看需不需要扩容            resize();        }else{            throw new Exception();        }    }    /**     * 出栈操作     */    public E pop() throws Exception{        if(top==0){            throw new Exception();
}else{ E ret=items[--top]; items[top]=null;return ret; } }/**
* resize操作,把数组扩大两倍
*/public void resize(){// 如果top和capacity相等的话,说明满了if(top==capacity){// 把范围括大2倍this.capacity = this.capacity*2;// new一个新数组 E[] newItems = (E[])new Object [this.capacity];// 转移老数据 System.arraycopy(items,0,newItems,0,items.length);// 把新的数组当成底层的存储this.items = newItems; } }public static void main(String[] args) { StackDemostack = new StackDemo<>(2);try {stack.push("first");stack.push("second");stack.push("third");stack.push("four"); String pop = stack.pop(); System.out.println(pop); } catch (Exception e) { e.printStackTrace(); } }}

DEMO总评

栈是基础也是极其重要的数据结构,不仅仅要明白栈的特性,同时也要具备能手写一个栈的能力,在写的过程中才能注意到那些可能有坑的地方,才能注意到那些小细节,如System.arraycopy的使用,以及在多线程情况下的风险, 加油吧,少年!

可添加小刀微信获取源码

cec2e083f82a28689216997cb75aee0b.png

164a9cd740f67dd9a2d26e89563aca81.png往期热文docker|docker安装redisjava基础|验证i++的线程不安全springboot|springboot新建aop切面springboot|springboot配置定时任务及常用的cron表达式点在看的都没有bug!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值