前言
队列是一种基于先进先出的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表。
代码示例
public class Queue<T> implements Iterable<T>{
private Node<T> head;
private Node<T> last;
private int size;
public Queue() {
head = new Node<>(null, null);
last=null;
size=0;
}
public int size(){
return size;
}
public boolean isEmpty(){
return size==0;
}
public void add(T t){
//创建新的结点
Node<T> newNode = new Node<>(t,null);
if (last==null){
head.next = newNode;
last = newNode;
}else {
Node<T> oldLast = last;
last = newNode;
oldLast.next = newNode;
}
size++;
}
public T get(){
if (isEmpty()){
return null;
}
Node<T> oldFirst = head.next;
head.next = oldFirst.next;
size--;
if (isEmpty()){
last = null;
}
return oldFirst.item;
}
@Override
public Iterator<T> iterator() {
return new IIterator();
}
private class IIterator implements Iterator<T>{
Node<T> node ;
public IIterator() {
this.node = head;
}
@Override
public boolean hasNext() {
return node.next!=null;
}
@Override
public T next() {
node = node.next;
return node.item;
}
}
private class Node<T>{
T item;
Node next;
public Node(T item, Node next) {
this.item = item;
this.next = next;
}
}
}
测试:
public static void main(String[] args) {
Queue<Integer> q = new Queue<>();
q.add(111);
q.add(222);
q.add(333);
for (Integer i : q){
System.out.println(i);
}
System.out.println("---------------------------");
System.out.println(q.get());
System.out.println(q.get());
System.out.println(q.get());
}