用数组实现队列
package array ;
import java. util. Arrays ;
public class ArrayQueue < E > {
Object [ ] element;
int size;
int head;
int tail;
int capacity;
int maxCapacity;
public ArrayQueue ( int capacity, int maxCapacity) {
this . capacity = capacity;
this . maxCapacity = maxCapacity;
element = new Object [ capacity] ;
size = 0 ;
head = 0 ;
tail = 0 ;
}
public void init ( int head, int tail) {
this . head = head;
this . tail = tail;
}
public E dequeue ( ) {
if ( head == tail) {
return null ;
}
Object poll = element[ head++ ] ;
size-- ;
return ( E ) poll;
}
public boolean enqueue ( E data) {
if ( ! resize ( ) ) {
return false ;
}
element[ tail++ ] = data;
size++ ;
return true ;
}
private boolean resize ( ) {
if ( tail < element. length) {
return true ;
}
if ( tail - head == maxCapacity) {
return false ;
}
if ( head == 0 ) {
growCapacity ( ) ;
} else {
migrateData ( ) ;
}
return true ;
}
private void migrateData ( ) {
for ( int i = head; i < tail; i++ ) {
element[ i - head] = element[ i] ;
}
init ( 0 , tail - head) ;
}
private void growCapacity ( ) {
int oldCapacity = element. length;
int newCapacity = oldCapacity + oldCapacity << 1 ;
if ( newCapacity > maxCapacity) {
newCapacity = maxCapacity;
}
this . element = Arrays . copyOf ( this . element, newCapacity) ;
}
public static void main ( String [ ] args) {
ArrayQueue queue = new ArrayQueue < String > ( 4 , 10 ) ;
queue. enqueue ( "helius1" ) ;
queue. enqueue ( "helius2" ) ;
queue. enqueue ( "helius3" ) ;
queue. enqueue ( "helius4" ) ;
queue. enqueue ( "helius5" ) ;
queue. enqueue ( "helius6" ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
queue. enqueue ( "helius7" ) ;
System . out. println ( queue. dequeue ( ) ) ;
queue. enqueue ( "helius8" ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
queue. enqueue ( "helius9" ) ;
queue. enqueue ( "helius10" ) ;
queue. enqueue ( "helius11" ) ;
queue. enqueue ( "helius12" ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
System . out. println ( queue. dequeue ( ) ) ;
}
}
循环队列
public class LeetCode622 {
int [ ] element;
int capacity;
int start;
int end;
int size;
public LeetCode622 ( int k) {
element = new int [ k] ;
this . capacity = k;
start = 0 ;
end = 0 ;
}
public boolean enQueue ( int value) {
if ( size == capacity) {
return false ;
}
end = end % capacity;
element[ end] = value;
end++ ;
size++ ;
return true ;
}
private void init ( ) {
start = 0 ;
end = 0 ;
}
public boolean deQueue ( ) {
if ( size == 0 ) {
return false ;
}
int poll = element[ start] ;
size-- ;
start++ ;
start = start % capacity;
return true ;
}
public int Front ( ) {
return isEmpty ( ) ? - 1 : element[ start] ;
}
public int Rear ( ) {
return isEmpty ( ) ? - 1 : element[ end - 1 ] ;
}
public boolean isEmpty ( ) {
return size == 0 ;
}
public boolean isFull ( ) {
return size == capacity;
}
public static void main ( String [ ] args) {
LeetCode622 leetCode622 = new LeetCode622 ( 3 ) ;
leetCode622. enQueue ( 3 ) ;
int rear = leetCode622. Rear( ) ;
int front = leetCode622. Front( ) ;
leetCode622. deQueue ( ) ;
leetCode622. Front( ) ;
leetCode622. deQueue ( ) ;
leetCode622. Front( ) ;
leetCode622. enQueue ( 3 ) ;
leetCode622. enQueue ( 3 ) ;
leetCode622. enQueue ( 3 ) ;
leetCode622. enQueue ( 3 ) ;
}
}