Java基于链表实现栈的方法详解

 更新时间:2020年03月17日 12:04:59   转载 作者:WFaceBoss  
这篇文章主要介绍了Java基于链表实现栈的方法,结合实例形式详细分析了Java基于链表实现栈的原理、操作步骤与相关注意事项,需要的朋友可以参考下

本文实例讲述了Java基于链表实现栈的方法。分享给大家供大家参考,具体如下:

在上几小节中我们实现了基本的链表结构,并在上一节的底部给出了有关链表的源码,此处在贴一次吧,猛戳

在开始栈的实现之前,我们再来看看关于链表的只在头部进行的增加、删除、查找操作,时间复杂度均为O(1),基于链表的这几个优势,我们在此基础上实现栈。

前言,在写本小节之前,我们已经实现了一个基于静态数组的栈,转到查看。此处我们实现基于链表的栈。

1.链表类拷贝到Stack 包下:

在实现基于静态数组的栈的时候,我们已经新建了一个package,此时我们将已经实现的链表类拷贝到该package下,目录结构为:

2.实现栈

新建一个LinkedListStack类,实现Stack接口,相关代码如下:

Stack接口:

package Stack;

public interface Stack<E> {

  //栈中元素个数
  int getSize();

  //栈中元素个数是否为空
  boolean isEmpty();

  //进栈
  void push(E e);

  //出栈
  E pop();

  //查看栈顶元素
  E peek();
}

个LinkedListStack类:

package Stack;

public class LinkedListStack<E> implements Stack<E> {
  private LinkedList<E> list;

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

  //栈中元素个数
  @Override
  public int getSize() {
    return list.getSize();
  }

  //栈中是否为空
  @Override
  public boolean isEmpty() {
    return list.isEmpty();
  }

  //在栈中添加元素
  @Override
  public void push(E e) {
    list.addFirst(e);
  }

  //从栈中删除第一个元素
  @Override
  public E pop() {
    return list.removeFirst();
  }

  //查看栈中第一个元素
  @Override
  public E peek() {
    return list.getFirst();
  }


  //主要是便于输出给对象信息
  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();
    res.append("Stack: top ");
    res.append(list);
    return res.toString();
  }

}

3.添加测试代码

为了测试的简单,我们在已经实现了Stack接口的LinkedListStack类中建立以main()方法,main中代码如下:

  //测试
  public static void main(String[] args) {
    LinkedListStack<Integer> stack = new LinkedListStack<Integer>();
    for (int i = 0; i < 5; i++) {
      stack.push(i);
      System.out.println(stack);
    }
    System.out.println("出栈一个元素:");
    stack.pop();
    System.out.println(stack);
  }

结果为:

 到此我们实现了底层是链表的栈。

关于本小节,若您觉得还行、还过得去,记得给个推荐哦~,谢谢!!

本节源码 https://github.com/FelixBin/dataStructure/blob/master/src/Stack/LinkedListStack.java

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • SpringMVC高级开发功能实现过程解析

    SpringMVC高级开发功能实现过程解析

    这篇文章主要介绍了SpringMVC高级开发功能实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • java编程队列数据结构代码示例

    java编程队列数据结构代码示例

    这篇文章主要介绍了java编程队列数据结构代码示例,简单介绍了队列的相关基础知识,然后通过实例向大家展示其实现方法,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • 浅谈spring中的default-lazy-init参数和lazy-init

    浅谈spring中的default-lazy-init参数和lazy-init

    下面小编就为大家带来一篇浅谈spring中的default-lazy-init参数和lazy-init。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 十分钟理解Java中的动态代理

    十分钟理解Java中的动态代理

    十分钟帮助大家理解Java中的动态代理,什么是动态代理?感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 使用ftpClient下载ftp上所有文件解析

    使用ftpClient下载ftp上所有文件解析

    最近项目需要写个小功能,需求就是实时下载ftp指定文件夹下的所有文件(包括子目录)到本地文件夹中,保留文件到目录路径不变。今天小编给大家分享使用ftpClient下载ftp上所有文件的方法,需要的的朋友参考下吧
    2017-04-04
  • 详解Java实现负载均衡的几种算法代码

    详解Java实现负载均衡的几种算法代码

    本篇文章主要介绍了详解Java实现负载均衡的几种算法代码 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • java四种访问权限实例分析

    java四种访问权限实例分析

    这篇文章主要介绍了java四种访问权限实例分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java实现斗地主最简代码实例

    Java实现斗地主最简代码实例

    在本篇文章里小编给各位分享的是关于Java实现斗地主最简代码实例,有兴趣的朋友们可以参考下。
    2020-05-05
  • Java封装数组之动态数组实现方法详解

    Java封装数组之动态数组实现方法详解

    这篇文章主要介绍了Java封装数组之动态数组实现方法,结合实例形式详细分析了java动态数组的实现原理、操作步骤与相关注意事项,需要的朋友可以参考下
    2020-03-03
  • Springboot项目与vue项目整合打包的实现方式

    Springboot项目与vue项目整合打包的实现方式

    这篇文章主要介绍了Springboot项目与vue项目整合打包的实现方式,本文通过两种方式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07

最新评论