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

本贴最后更新于 1994 天前,其中的信息可能已经时过境迁

javaDEMO

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

用 java 实现一个栈

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

/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/6 **/ public class StackDemo<E> { /** 底层使用一个泛型数组做存储 */ 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) { StackDemo<String> stack = 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 的使用,以及在多线程情况下的风险, 加油吧,少年!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3197 引用 • 8215 回帖 • 1 关注
  • 数据结构
    87 引用 • 115 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...