链表

来源:互联网 发布:淘宝网臭豆腐4号碗 编辑:程序博客网 时间:2024/06/06 19:10

《算法》—链表

  1. 基础数据类型 背包、队列、栈

    1. 背包:一种不支持从中删除元素的集合数据类型—它的目的就是帮助收集元素,并迭代遍历所有收集到的元素;
    2. 队列:又叫先进先出队列,是一种基于先进先出(FIFO)策略的集合类型;
    3. 栈:又叫下压栈,是一种基于后进先出(LIFO)策略的集合类型。
  2. 链表

    1. 定义:链表是一种递归的数据结构,它或者为空(null),或者指向一个结点的引用,该结点包含一个元素和一个指向另一条链表的引用。

    2. 下压堆栈代码实现

      public class StackDemo<Item> implements Iterable<Item> {  private int N;  private Node first;  private class Node {      Item item;      Node next;  }  /**   * 链表是否为空   *   * @return   */  public boolean isEmpty() {      return N == 0;  }  /**   * 链表大小   * @return   */  public int size() {      return N;  }  /**   * 添加   * @param item   */  public void push(Item item) {      Node old = first;      first = new Node();      first.item = item;      first.next = old;      N++;  }  /**   * 删除最上面的节点   * @return   */  public Item pop() {      Item t = first.item;      first = first.next;      N--;      return t;  }  @Override  public Iterator<Item> iterator() {      return new StackDemoIterator();  }  private class StackDemoIterator implements Iterator<Item> {      private Node current = first;      @Override      public boolean hasNext() {          return current != null;      }      @Override      public Item next() {          Item t = current.item;          current = current.next;          return t;      }  }}

    3. 队列实现

      public class QueueDemo<Item> implements Iterable<Item> {  private Node first;  private Node last;  private int N;  private class Node {      Item item;      Node next;  }  /**   * 队列事否为空   * @return   */  public boolean isEntity() {      return first == null;  }  /**   * 队列的大小   * @return   */  public int size() {      return N;  }   /**     * 向队列中添加元数     * @param item     */    public void enqueue(Item item) {        Node oldLast = last;        last = new Node();        last.item = item;        last.next = null;        if (isEntity()) first = last;        else oldLast.next = last;        N++;    }    /**     * 取出最先进入队列的元数,并从队列中删除     * @return     */    public Item dequeue() {        Item item = first.item;        first = first.next;        if (isEntity()) last = null;        N--;        return item;    }    @Override    public Iterator<Item> iterator() {        return new QueueDemoIterator();    }    private class QueueDemoIterator implements Iterator<Item> {        private Node current = first;        @Override        public boolean hasNext() {            return current != null;        }        @Override        public Item next() {            Item item = current.item;            current = current.next;            return item;        }    }}
    4. 背包实现

      ​ 背包的实现同栈的一样,仅是把pop()实现既可,push()改为add()

原创粉丝点击