/**
*
*/
package jp.co.worksap.global;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Queue;
import javax.print.attribute.Size2DSyntax;
/**
* @author renlei
* @E-mail:renlei0109@yeah.net
* @version 1
* The Queue class repressnts an immutable first-in-first-out(FIFO) queue of Objects.
* @param<E>
*/
public class ImmutableQueue<E> {
public QueueNode<E>headerNode = null;
public QueueNode<E>tailNode = null;
/**
* requires defualt constructor
*/
public ImmutableQueue(){}
public ImmutableQueue(E e){
headerNode = new QueueNode<E>(e, null, null);
tailNode = new QueueNode<E>();
tailNode = headerNode;
}
public ImmutableQueue(ImmutableQueue<E>im){
QueueNode<E>head =im.headerNode;
for(;head!=null;head = head.next){
this.enqueueConstruct(head.element);
}
}
/**
* Returns the queue that adds an item into the tail of this queue without(modifying this queue)
* if this queue is empty throws IllegalArgumentException
* @param e
* @return
* @throws IllegalArgumentException
*/
public ImmutableQueue<E> enqueue(E e){
if(e==null)
throw new IllegalArgumentException();
ImmutableQueue<E> immutableQueue ;
if(headerNode == null){
immutableQueue = new ImmutableQueue<E>(this);
immutableQueue.headerNode = new QueueNode<E>(e, null, null);
tailNode = headerNode;
}
else{
immutableQueue = new ImmutableQueue<E>(this);
QueueNode<E> node = new QueueNode<E>(e, immutableQueue.tailNode, null);
immutableQueue.tailNode.next = node;
immutableQueue.tailNode = node;
}
return immutableQueue;
}
/**
* insert element to queue to construct the queue
* @param e
*/
public void enqueueConstruct(E e){
if(headerNode == null){
headerNode = new QueueNode<E>(e, null, null);
tailNode = headerNode;
}
else{
QueueNode<E> node = new QueueNode<E>(e, tailNode, null);
tailNode.next = node;
tailNode = node;
}
}
/**
* Returns the queue that removes the Object at the head of this queue without
* modifying this queue
* @return
* @throws NoSuchElementException
*/
public ImmutableQueue<E>dequeue(){
ImmutableQueue<E>immutableQueue;
if(headerNode==null&&tailNode==null)
throw new NoSuchElementException();//when the queue is empty ,throws NoSuchElementException;
else{
immutableQueue = new ImmutableQueue<E>(this);
QueueNode<E>delNode = immutableQueue.headerNode;
immutableQueue.headerNode.next.previous = null;
immutableQueue.headerNode = immutableQueue.headerNode.next;
delNode = null;
}
return immutableQueue;
}
public E peek(){
if (headerNode == null) {
throw new NoSuchElementException();//when the queue is empty ,throws NoSuchElementException;
}
else{
return headerNode.element;
}
}
public int size(){
int size = 0;
QueueNode<E>head = headerNode;
for(;head!=null;head=head.next){
size++;
}
return size;
}
/**
* Test method
* @param arsg
*/
/* public static void main(String []arsg){
ImmutableQueue<Integer>immutableQueue = new ImmutableQueue<Integer>();
for(int i = 0;i<11;i++){
immutableQueue.enqueueConstruct(i);
}
//Test equeue
ImmutableQueue<Integer> immutableQueue2 = immutableQueue.enqueue(88);
//Test dequeue
//ImmutableQueue<Integer> immutableQueue2 = immutableQueue.dequeue();
QueueNode<Integer>head =null;
for(head = immutableQueue2.headerNode;head!=null;head = head.next){
System.out.println(head.element);
}
for(head = immutableQueue.headerNode;head!=null;head = head.next){
System.out.println(head.element+"&");
}
//Test size()
System.out.println(immutableQueue2.size()+"**"+immutableQueue.size());
}
*/
/**
* define one node for the queue
* @author renlei
* @E-mail:renlei0109@yeah.net
*/
static class QueueNode<E>{
E element;
QueueNode<E> previous;
QueueNode<E> next;
public QueueNode(){}
public QueueNode(E e ,QueueNode<E> previous, QueueNode<E> next){
this.element = e;
this.previous = previous;
this.next = next;
}
}
}
ImmutableQueue
最新推荐文章于 2023-10-27 14:58:04 发布