package org.loda.structure;
import java.util.Iterator;
/**
*
* @ClassName: Queue
* @Description: 队列操作
* @author minjun
* @date 2015年5月16日 上午12:27:22
*
* @param <Item>
*/
public class Queue<Item> implements Iterable<Item>{
private Node first;
private Node last;
private int size = 0;
private class Node {
Item item;
Node next;
public Node(Item item) {
this.item = item;
}
}
/**
*
* @Title: enqueue
* @Description: 入列
*
* 时间复杂度为O(1)
*
* @param @param item 设定文件
* @return void 返回类型
* @throws
*/
public void enqueue(Item item) {
if (size == 0) {
first = new Node(item);
last = first;
} else {
Node oldLast = last;
last = new Node(item);
oldLast.next = last;
}
size++;
}
/**
*
* @Title: dequeue
* @Description:出列
*
* 时间复杂度为O(1)
*
* @param @return 设定文件
* @return Item 返回类型
* @throws
*/
public Item dequeue() {
if (size == 0)
throw new RuntimeException("没有元素了");
Node oldFirst = first;
first = first.next;
size--;
return oldFirst.item;
}
@Override
public Iterator<Item> iterator() {
return new QueueIterator();
}
private class QueueIterator implements Iterator<Item>{
private Node f=first;
@Override
public boolean hasNext() {
return f!=null;
}
@Override
public Item next() {
Item item=f.item;
f=f.next;
return item;
}
@Override
public void remove() {
throw new RuntimeException("不支持删除操作");
}
}
public static void main(String[] args) {
Queue<String> queue = new Queue<String>();
for (int i = 0; i < 10; i++) {
queue.enqueue((char) (i + 65) + "bbbb");
}
// 下面进行两次迭代测试,目的是确认该queue的迭代器可以复用
for(String s:queue){
System.out.println(s);
}
System.out.println("-----------------");
for(String s:queue){
System.out.println(s);
}
}
}