链表
来源:互联网 发布:淘宝网臭豆腐4号碗 编辑:程序博客网 时间:2024/06/06 19:10
《算法》—链表
基础数据类型 背包、队列、栈
- 背包:一种不支持从中删除元素的集合数据类型—它的目的就是帮助收集元素,并迭代遍历所有收集到的元素;
- 队列:又叫先进先出队列,是一种基于先进先出(FIFO)策略的集合类型;
- 栈:又叫下压栈,是一种基于后进先出(LIFO)策略的集合类型。
链表
定义:链表是一种递归的数据结构,它或者为空(null),或者指向一个结点的引用,该结点包含一个元素和一个指向另一条链表的引用。
下压堆栈代码实现
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; } }}
队列实现
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; } }}
背包实现
背包的实现同栈的一样,仅是把pop()实现既可,push()改为add()