Devo realizzare entro Martedì una FIFO che trovo particolarmente incasinata con un array..
per chi non sapesse come funziona, faccio un breve esempio (FIFO -> First In First Out, il primo che viene inserito è il primo ad essere estratto, come nella coda del supermercato)
Front e Back tengono traccia del punto di inizio e del punto finale della coda.
Inserisco il primo elemento (gli elementi vuoti sono null):
front=0 back=0
--------------------
| a | null | null |
--------------------
Ne inserisco un altro:
front=0 back=1
------------
| a | b | |
------------
tolgo il primo:
front=1 back=1
------------
| | b | |
------------
Ne metto due, siccome è una FIFO circolare il primo dei due elementi immessi verrà messo all'inizio e il secondo nel primo posto vuoto.
front=1 (punta a b) back=2 (punta a d)
------------
| c | b | d |
------------
Trovo la cosa molto complicata da gestire, ho provato a realizzare il programma ma ho parecchi problemi nell'estrazione di un elemento...
so che è un programma impegnativo, ma qualcuno avrebbe voglia di darci un'occhiata?
codice:
public class FIFO
{
private String array[];
private int front, back, num; //num tiene conto del numero di elementi presenti nella cosa
public int max; //lunghezza massima dell'array
public FIFO(){
max=0;
front=0;
back=0;
num=0;
}
public FIFO(int maxElementi){
array=new String[maxElementi]; //creo un array con grandezza data in input
max=maxElementi;
}
public boolean insert(String s)
{
if((front==0)&&(back==0)&&(num!=0)) //se la coda è piena
return false;
if (back==max-1){ //se back è alla fine della coda
array[back]=s;
back=0;
}
if((array[back]==null)||(array[back]=="")){ //se si è su una cella vuota
//si può scrivere
array[back]=s;
back++;
num++;
}
num++;
return true;
}
public String toString(){ //stampa la successione di elementi
String stringa="";
if(num==0)
System.out.println("La CODA e' vuota!");
else
if(front<back)
for(int i=front;i<=back;i++)
stringa=stringa+array[i];
else
{
for(int i=front;i<max;i++)
stringa=stringa+array[i];
for(int i=0;i<back;i++)
stringa=stringa+array[i];
}
return stringa;
}
public String extract() //restituisce un elemento, cancellandolo dalla coda
{
if(num!=0){ //se ci sono elementi nella coda
String estr= array[front];
if (front == max-1) //se front è alla fine
{
array[front]="";
front=0;
}
else
front++;
num--;
return estr;
}
return null;
}
}
Chiunque avesse altri dubbi (e immagino ne avrà :P) chieda pure! Pubblicherò la classe che usa questa, la sto rifacendo perché avevo fatto qualche pasticcio
Grazie