成都网站建设设计

将想法与焦点和您一起共享

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

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

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的惠城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

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

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

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

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

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

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

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

2.实现栈

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

Stack接口:

package Stack;

public interface Stack {

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

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

  //进栈
  void push(E e);

  //出栈
  E pop();

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

个LinkedListStack类:

package Stack;

public class LinkedListStack implements Stack {
  private LinkedList list;

  public LinkedListStack() {
    list = new LinkedList();
  }

  //栈中元素个数
  @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 stack = new LinkedListStack();
    for (int i = 0; i < 5; i++) {
      stack.push(i);
      System.out.println(stack);
    }
    System.out.println("出栈一个元素:");
    stack.pop();
    System.out.println(stack);
  }

结果为:

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

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

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

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

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

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


名称栏目:Java基于链表实现栈的方法详解
分享URL:http://chengdu.cdxwcx.cn/article/gcicpe.html