package com.zt.data;
import java.util.Iterator;
import javax.swing.plaf.basic.BasicScrollPaneUI.HSBChangeListener;
import edu.princeton.cs.algs4.In;
public class Queue<Item> implements Iterable<Item>{
private Node first;
private Node last;
private int N;
private class Node<Item>{
Item item;
Node next;
};
public Queue(){
first = null;
last =null;
}
public boolean isEmpty(){
return first==null;
}
public int size(){
return N;
}
public void enqueue(Item item){
Node node = new Node();
node.item = item;
if(isEmpty()){
first = node;
last = node;
}else{
last.next = node;
last = node;
}
N++;
}
public Item dequeue(){
if(isEmpty()) throw new RuntimeException("Queue is null!!!");
Item item = (Item) first.item;
first = first.next;
N--;
return item;
}
public String toString(){
StringBuilder s = new StringBuilder();
for(Item item:this){
s.append(item+" ");
}
return s.toString();
}
public static void main(String[] args) {
Queue<Integer> queue = new Queue<Integer>();
for(int i=0;i<10;i++){
queue.enqueue(i);
}
System.out.println(queue.toString()+ "Size:" + queue.size());
System.out.println(queue.dequeue());
System.out.println(queue.dequeue());
System.out.println(queue.toString()+ "Size:" + queue.size());
}
@Override
public Iterator<Item> iterator() {
return new ListIterator();
}
private class ListIterator implements Iterator<Item>{
private Node current = first;
@Override
public boolean hasNext() {
return current!=null;
}
@Override
public Item next() {
if(!hasNext()){
throw new RuntimeException("has not Next");
}
Item item = (Item) current.item;
current = current.next;
return item;
}
}
}
转载于:https://my.oschina.net/projerry/blog/665747