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?
Chiunque avesse altri dubbi (e immagino ne avrà :P) chieda pure! Pubblicherò la classe che usa questa, la sto rifacendo perché avevo fatto qualche pasticciocodice: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; } }![]()
Grazie![]()

Rispondi quotando

