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

所属分类: 软件编程 / java 阅读数: 44
收藏 0 赞 0 分享

本文实例讲述了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程序设计有所帮助。

更多精彩内容其他人还在看

利用MultipartFile实现文件上传功能

这篇文章主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java编程实现NBA赛事接口调用实例代码

这篇文章主要介绍了Java编程实现NBA赛事接口调用实例代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java编程之双重循环打印图形

这篇文章主要介绍了Java编程之双重循环打印图形,属于Java编程基础练习部分,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

java基础学习JVM中GC的算法

这篇文章主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。
收藏 0 赞 0 分享

Java编程Post数据请求和接收代码详解

这篇文章主要介绍了Java编程Post数据请求和接收代码详解,涉及enctype的三种编码,post与get等相关内容,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Retrofit+Rxjava实现文件上传和下载功能

这篇文章主要介绍了Retrofit+Rxjava实现文件上传和下载功能,文中提到了单文件上传和多文件上传及相关参数的请求,需要的朋友参考下吧
收藏 0 赞 0 分享

Retrofit+Rxjava下载文件进度的实现

这篇文章主要介绍了Retrofit+Rxjava下载文件进度的实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java检查服务器的连通两种方法代码分享

这篇文章主要介绍了java检查服务器的连通两种方法代码分享,涉及ping的介绍以及检查服务器连通的两种方法代码示例,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java/Android 获取网络重定向文件的真实URL的示例代码

本篇文章主要介绍了Java/Android 获取网络重定向文件的真实URL的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java并发编程之同步器代码示例

这篇文章主要介绍了java并发编程之同步器代码示例,分享了相关代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享
查看更多