Use uma matriz para simular uma fila circular
O significado da variável front é ajustado, front aponta para o primeiro elemento da fila, ou seja, arr [front] é o primeiro elemento da fila. O valor inicial de frente é 0
O significado da variável traseira é ajustado e a parte traseira aponta para uma posição após o último elemento da fila. Porque eu quero fazer um espaço. O valor inicial de traseira é 0
Julgamento de que a fila está cheia: (traseiro + 1)% maxSize == frente
Julgamento da fila vazia: traseira == frente
O número de valores válidos na fila: (traseiro-frontal + maxSize)% maxSize
Código
import java. util. Scanner;
public class CircleQueueDemo {
public static void main ( String[ ] args) {
CircleQueue circleQueue = new CircleQueue ( 3 ) ;
Scanner scanner = new Scanner ( System. in) ;
char key = ' ' ;
boolean loop = true ;
while ( loop) {
System. out. println ( "s(show)" ) ;
System. out. println ( "a(add)" ) ;
System. out. println ( "g(get)" ) ;
System. out. println ( "e(exit)" ) ;
System. out. println ( "h(head)" ) ;
key = scanner. next ( ) . charAt ( 0 ) ;
switch ( key) {
case 's' :
circleQueue. showQueue ( ) ;
break ;
case 'a' :
System. out. println ( "请输入一个数" ) ;
try {
int temp1 = scanner. nextInt ( ) ;
circleQueue. addQueue ( temp1) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
break ;
case 'g' :
try {
System. out. println ( circleQueue. getQueue ( ) ) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
break ;
case 'e' :
loop = false ;
break ;
case 'h' :
System. out. println ( circleQueue. headQueue ( ) ) ;
break ;
default :
break ;
}
}
System. out. println ( "退出程序" ) ;
}
}
class CircleQueue {
private int maxSize;
private int front;
private int rear;
private int [ ] arr;
public CircleQueue ( int maxSize) {
this . maxSize = maxSize;
front = 0 ;
rear = 0 ;
arr = new int [ maxSize] ;
}
public boolean isFull ( ) {
return ( rear + 1 ) % maxSize == front;
}
public boolean isEmpty ( ) {
return rear == front;
}
public int size ( ) {
return ( rear + maxSize - front) % maxSize;
}
public void addQueue ( int n) {
if ( isFull ( ) ) {
System. out. println ( "队列满" ) ;
return ;
}
arr[ rear] = n;
rear = ( rear + 1 ) % maxSize;
}
public int getQueue ( ) {
if ( isEmpty ( ) ) {
throw new RuntimeException ( "队列空" ) ;
}
int value = arr[ front] ;
front = ( front + 1 ) % maxSize;
return value;
}
public int headQueue ( ) {
if ( isEmpty ( ) ) {
throw new RuntimeException ( "队列空" ) ;
}
return arr[ front] ;
}
public void showQueue ( ) {
if ( isEmpty ( ) ) {
System. out. println ( "队列空" ) ;
return ;
}
for ( int i = front; i < front + size ( ) ; i++ ) {
System. out. printf ( "arr[%d] = %d" , i% maxSize, arr[ i% maxSize] ) ;
System. out. println ( ) ;
}
}
}