栈———使用链表实现栈

一.简介

  栈也是一种频繁插入和删除元素的数据结构,所以使用链表实现也是一种比较好的选择。

二.代码实现

  • DummyLinkedList 链表的实现 在我的 "链表——链表的基本概念及基本实现"中介绍过有兴趣的朋友可以看一下。这里我直接是用了DummyLinkedList。
public interface Stack {
  //获得栈中元素总数
  int getSize();
  //判断是否为空
  boolean isEmpty();
  //查看栈顶元素
  E peek();
  //出栈
  E pop();
  //入栈
  void push(E e);
}

/**
 * 链表栈 时间复杂度O(1)
 */
public class LinkedListStack implements Stack {

  private DummyLinkedList linkedList;


  public LinkedListStack() {
    this.linkedList = new DummyLinkedList<>();
  }

  @Override
  public int getSize() {
    return linkedList.getSize();
  }

  @Override
  public boolean isEmpty() {
    return linkedList.isEmpty();
  }

  @Override
  public E peek() {
    return linkedList.getFirst();
  }

  @Override
  public E pop() {
    return linkedList.removeFirst();
  }

  @Override
  public void push(E e) {
    linkedList.addFirst(e);
  }

  @Override
  public String toString() {
    StringBuilder res = new StringBuilder();
    res.append("Stack: top ");
    res.append(linkedList);
    return res.toString();
  }
}

三.时间复杂度分析

  使用链表实现的栈出栈入栈都是O(1)的操作,与数组栈的复杂度一致,只不过影响LinkedListStack的主要是对象的创建,而影响ArrayStack的主要操作是数组的移动,所以两者效率上是差不多的。

你可能感兴趣的:(栈———使用链表实现栈)