2019独角兽企业重金招聘Python工程师标准>>>

  在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述。
  栈:后进先出;最后一个放入堆栈中的物体总是被最先拿出来。
  使用链表来模拟栈的入栈出栈操作。

1.节点类代码

public class Entry<T> {
private T value;
private Entry<T> next;
public Entry() {
    this(null);
}
public Entry(T value) {
    this.value=value;
    this.next=null;
}
   
public void setValue(T value) {
    this.value=value;
}
public void setNext(Entry<T> next) {
    this.next=next;
}
public T getValue() {
    return value;
}
public Entry<T> getNext(){
    return next;
}
}

2.节点的入栈出栈方法代码

public class Link<T> {//链表实现栈,先进后出
private Entry<T> headEntry;
private int size=0;
public Link() {
    headEntry =new Entry<>();
}
public void pop() {//出栈
    if(headEntry.getNext()!=null) {
    headEntry.getNext().setValue(null);
    headEntry.setNext(headEntry.getNext().getNext());
    size--;
    }else {
        return;
    }
   
}
public void push(T value) {//入栈
    Entry<T> newEntry=new Entry<>(value);
    if(headEntry.getNext()!=null) {
        newEntry.setNext(headEntry.getNext());
       
    }
        headEntry.setNext(newEntry);
        size++;
   
}

public void show(){//打印节点
    if(headEntry.getNext()==null) {
        return;
    }
    for(Entry<T> p = headEntry.getNext();p!=null;p=p.getNext()){
        System.out.print(p.getValue()+" ");
    }
    System.out.println();
}
}

3.测试类代码

public class Main {
public static void main(String args[]) {
    Link<String> ll=new Link<>();
    ll.push("1");//入栈
    ll.push("2");
    ll.push("3");
    ll.push("4");
    ll.push("5");
    ll.push("6");
    ll.push("7");
    ll.push("8");
    ll.show();//打印栈内元素
    ll.pop();//弹出栈顶元素
    ll.show();
    ll.pop();
    ll.show();
}
}

4.测试结果

转载于:https://my.oschina.net/u/3980693/blog/3004301

Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作相关推荐

  1. 【干货】Redis在Java开发中的基本使用和巧妙用法

    Redis是一款高性能的内存数据结构存储系统,能够支持多种数据结构类型,如字符串.哈希.列表.集合.有序集合等,也能够支持高级功能,如事务.发布/订阅.Lua脚本等,具有高可用性.高并发性和可扩展性的 ...

  2. Java开发中Netty线程模型原理解析!

    Java开发中Netty线程模型原理解析,Netty是Java领域有名的开源网络库具有高性能和高扩展性的特点,很多流行的框架都是基于它来构建.Netty 线程模型不是一成不变的,取决于用户的启动参数配 ...

  3. 编写高质量代码:改善Java程序的151个建议 (第1章 Java开发中通用的方法和准则)

    第1章 Java开发中通用的方法和准则 The reasonable man adapts himself to the world;the unreasonable one persists in ...

  4. java开发中遇到的问题及解决方法(持续更新)

    java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...

  5. Java开发中Websocket的技术选型参考

    1. 前言 Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议.WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 ...

  6. Java开发中文件读取方式总结

    JAVA开发中,免不了要读文件操作,读取文件,首先就需要获取文件的路径.路径分为绝对路径和相对路径. 在文件系统中,绝对路径都是以盘符开始的,例如C:abc1.txt. 什么是相对路径呢?相对路径就是 ...

  7. Java开发中消息中间件的优势有哪些?

    系统解耦 交互系统之间没有直接的调用关系,只是通过消息传输,故系统侵入性不强,耦合度低. 提高系统响应时间 例如原来的一套逻辑,完成支付可能涉及先修改订单状态.计算会员积分.通知物流配送几个逻辑才能完 ...

  8. Java开发中更多常见的危险信号

    在< Java开发中的常见危险信号>一文中,我研究了一些不一定本身就是错误或不正确的做法,但它们可能表明存在更大的问题. 这些"红色标记"类似于"代码气味&q ...

  9. Java开发中的常见危险信号

    在开发,阅读,复审和维护成千上万行Java代码的几年中,我已经习惯于看到Java代码中的某些" 危险信号 ",这些信号通常(但可能并非总是)暗示着代码问题. 我不是在谈论总是错误的 ...

最新文章

  1. 和 VMware、深信服、天翼云、招商云专家一起聊聊云原生边缘计算
  2. [经典算法] 河内塔
  3. Circular Dance
  4. Loadrunner学习笔记(三)
  5. JavaFX UI控件教程(二十七)之File Chooser
  6. linux 内核系统优化,Linux高并发应用类型对系统内核的优化
  7. 充分发挥计算机在教学中的辅助作,充分发挥计算机在教学中的辅助作用
  8. datagridview列 值提取_Pandas中的缺失值处理
  9. 团队开发——第一次冲刺第7天
  10. android软键盘自动弹出,android安卓editText自动弹出软键盘(输入键盘)
  11. 风变Python8编程时,两大思维模式
  12. Keil 5(C51, MDK) 官方下载方法
  13. 437 路径总和-02
  14. python 飞机大战爆炸效果_Pygame飞机大战为什么飞机与敌机碰撞后不再有图片动态切换效果...
  15. FPGA 基础知识(亚稳态、流水线、时序约束、信号同步、时钟等)
  16. Unity 3d 中Debug.Log和Print的区别。
  17. 安装PL-2303驱动
  18. 【Adobe】Photoshop :Windows 系统 Photoshop 软件更换许可指引
  19. GB/T 10707 橡胶燃烧性能
  20. 游戏技术汇:莉莉丝COO张昊解剖《刀塔传奇》开发经验心得

热门文章

  1. matplotlib数据可视化实战——饼状图+雷达图+三维图
  2. 花书+吴恩达深度学习(八)优化方法之 Batch normalization
  3. oracle undo数据文件坏,oracle undo数据文件损坏故障处理案例
  4. java.sql.SQLSyntaxErrorException: Unknown column ‘###‘ in ‘field list‘
  5. 第2章[2.7] Ext JS数据模型与数据封装
  6. Visual studio 2012 创建web service
  7. IE、FireFox、Opera三种浏览器Document对象的方法对比
  8. C++的三种封装层级
  9. android pdf生成 路径,android – 如何从指向PDF文档的URI获取文件路径?
  10. html目录清华,清华大学HTML、《网页设计与制作》讲义.ppt