1、棧是一種後進先出策略的集合類型
/**
* 通用節點
*/
public class Node<T> {
private T item;
private Node<T> next;
public Node(T item) {
this.item = item;
}
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
}
public class Stack<T> {
private Node<T> first;
private int size;
public boolean isEmpty() {
return size == 0;
}
public int getSize() {
return size;
}
public void push(T item) {
// 向棧頂添加元素
Node<T> oldFirst = first;
first = new Node<>(item);
first.setNext(oldFirst);
size++;
}
public T pop() {
// 從棧頂刪除元素
Node<T> oldFirst = first;
first = oldFirst.getNext();
size--;
return oldFirst.getItem();
}
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("node1");
stack.push("node2");
stack.push("node3");
System.out.println(" size: " + stack.size);
System.out.println(stack.pop() + " size: " + stack.getSize() + " : " + stack.isEmpty());
System.out.println(stack.pop() + " size: " + stack.getSize() + " : " + stack.isEmpty());
System.out.println(stack.pop() + " size: " + stack.getSize() + " : " + stack.isEmpty());
}
}
2、隊列是一種基於先進先出策略的集合
public class Queue<T> {
private Node<T> first;
private Node<T> last;
private int size;
public boolean isEmpty() {
return size == 0;
}
public int getSize() {
return size;
}
public void enqueue(T item) {
if (this.size == 0) {
last = new Node<>(item);
first = last;
} else {
Node<T> oldLast = last;
last = new Node<>(item);
oldLast.setNext(last);
}
size++;
}
public T dequeue() {
Node<T> oldFirst = first;
first = first.getNext();
size--;
return oldFirst.getItem();
}
public static void main(String[] args) {
Queue<String> queue = new Queue<>();
queue.enqueue("node1");
queue.enqueue("node2");
queue.enqueue("node3");
System.out.println(" size: " + queue.size);
System.out.println(queue.dequeue() + " size: " + queue.getSize() + " : " + queue.isEmpty());
System.out.println(queue.dequeue() + " size: " + queue.getSize() + " : " + queue.isEmpty());
System.out.println(queue.dequeue() + " size: " + queue.getSize() + " : " + queue.isEmpty());
}
}
3.揹包是一種不支持從中刪除元素的結合數據類型,目的就是幫助用例收集元素並迭代遍歷所有收集到的元素。
public class Bag<T> implements Iterable<T> {
private Node<T> first;
private void add(T item) {
Node<T> oldFirst = first;
first = new Node<>(item);
first.setNext(oldFirst);
}
@Override
public Iterator<T> iterator() {
return new ListIterator();
}
private class ListIterator implements Iterator {
private Node<T> current = first;
@Override
public boolean hasNext() {
return current != null;
}
@Override
public Object next() {
T item = current.getItem();
current = current.getNext();
return item;
}
@Override
public void remove() {
}
}
public static void main(String[] args) {
Bag<String> bag = new Bag<>();
bag.add("node1");
bag.add("node2");
bag.add("node3");
Iterator<String> iterator = bag.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}