汽车
(它只是一辆车,不是队列节点)
public class Car {
private String driver;
public Car( String driver ) {
this.driver = driver;
}
@Override
public String toString() {
return "Car (" + driver + ")";
}
}
(实现仅处理汽车的队列)
public class QueueForCars {
private class Node {
Car value;
Node previous;
}
private Node head;
private Node tail;
private int size;
public QueueForCars() {
tail = null;
head = null;
size = 0;
}
public void enqueue( Car value ) {
Node newNode = new Node();
newNode.value = value;
newNode.previous = null;
if ( isEmpty() ) {
head = newNode;
tail = newNode;
} else {
tail.previous = newNode;
tail = newNode;
}
size++;
}
public Car dequeue() {
if ( !isEmpty() ) {
Car value = head.value;
if ( head == tail ) {
head = null;
tail = null;
} else {
Node temp = head;
head = head.previous;
temp.previous = null;
}
size--;
return value;
} else {
return null;
}
}
public boolean isEmpty() {
return head == null;
}
public int getSize() {
return size;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if ( !isEmpty() ) {
Node current = head;
while ( current != null ) {
if ( size == 1 ) {
sb.append( current.value ).append( " <- head/tail\n" );
} else if ( current == head ) {
sb.append( current.value ).append( " <- head\n" );
} else if ( current == tail ) {
sb.append( current.value ).append( " <- tail\n" );
} else {
sb.append( current.value ).append( "\n" );
}
current = current.previous;
}
} else {
sb.append( "empty queue!\n" );
}
return sb.toString();
}
}
测验
(测试实现)
public class Test {
public static void main( String[] args ) {
QueueForCars queue = new QueueForCars();
queue.enqueue( new Car( "John" ) );
System.out.println( queue );
queue.enqueue( new Car( "Mary" ) );
System.out.println( queue );
queue.enqueue( new Car( "Richard" ) );
System.out.println( queue );
queue.enqueue( new Car( "David" ) );
System.out.println( queue );
System.out.println();
System.out.println( "Dequeued: " + queue.dequeue() );
System.out.println( queue );
System.out.println( "Dequeued: " + queue.dequeue() );
System.out.println( queue );
System.out.println( "Dequeued: " + queue.dequeue() );
System.out.println( queue );
System.out.println( "Dequeued: " + queue.dequeue() );
System.out.println( queue );
System.out.println( "Dequeued: " + queue.dequeue() ); // <- empty queue!
System.out.println( queue );
}
}
队列
(队列的通用实现)
public class Queue<Type> {
private class Node<Type> {
Type value;
Node<Type> previous;
}
private Node<Type> head;
private Node<Type> tail;
private int size;
public Queue() {
tail = null;
head = null;
size = 0;
}
public void enqueue( Type value ) {
Node<Type> newNode = new Node<>();
newNode.value = value;
newNode.previous = null;
if ( isEmpty() ) {
head = newNode;
tail = newNode;
} else {
tail.previous = newNode;
tail = newNode;
}
size++;
}
public Type dequeue() {
if ( !isEmpty() ) {
Type value = head.value;
if ( head == tail ) {
head = null;
tail = null;
} else {
Node<Type> temp = head;
head = head.previous;
temp.previous = null;
}
size--;
return value;
} else {
return null;
}
}
public boolean isEmpty() {
return head == null;
}
public int getSize() {
return size;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if ( !isEmpty() ) {
Node<Type> current = head;
while ( current != null ) {
if ( size == 1 ) {
sb.append( current.value ).append( " <- head/tail\n" );
} else if ( current == head ) {
sb.append( current.value ).append( " <- head\n" );
} else if ( current == tail ) {
sb.append( current.value ).append( " <- tail\n" );
} else {
sb.append( current.value ).append( "\n" );
}
current = current.previous;
}
} else {
sb.append( "empty queue!\n" );
}
return sb.toString();
}
}
水果
public class Fruit {
private String name;
private String color;
public Fruit( String name, String color ) {
this.name = name;
this.color = color;
}
@Override
public String toString() {
return "Fruit (" + name + " is " + color + ")";
}
}
测验
(测试汽车和水果的通用队列)
public class Test {
public static void main( String[] args ) {
Queue<Car> queueForCars = new Queue<>();
queueForCars.enqueue( new Car( "John" ) );
System.out.println( queueForCars );
queueForCars.enqueue( new Car( "Mary" ) );
System.out.println( queueForCars );
queueForCars.enqueue( new Car( "Richard" ) );
System.out.println( queueForCars );
queueForCars.enqueue( new Car( "David" ) );
System.out.println( queueForCars );
System.out.println();
Queue<Fruit> queueForFruits = new Queue<>();
queueForFruits.enqueue( new Fruit( "Apple", "red" ) );
System.out.println( queueForFruits );
queueForFruits.enqueue( new Fruit( "Banana", "yellow" ) );
System.out.println( queueForFruits );
queueForFruits.enqueue( new Fruit( "Lime", "green" ) );
System.out.println( queueForFruits );
System.out.println();
}
}