giovedì 7 aprile 2011

Prova del 5 Aprile 2011


Questa è l'implementazione della mini-prova di Strutture Dati fatta dal prof La Torre il 5 Aprile 2011. Nella prima parte dell'esercizio veniva fornita un'interfaccia SequenzaIncompleta, e veniva chiesto di implementarne i metodi nella classe MiaSequenzaIncompleta usando a scelta una delle classi sviluppate durante il corso che implementano l'interfaccia Sequence (completa). Nella seconda parte veniva fornita una classe di Test per MiaSequenzaIncompleta dove veniva chiesto di scrivere una funzione che prende in input una Sequenza e la inverte.




public interface SequenzaIncompleta<E> 
{
public void addFirst(E e);
public E removeLast();
public E get(int i);
public Position<E> first();
public int size();

}

public class MiaSequenzaIncompleta<E> implements SequenzaIncompleta<E>
{
private ArrayIndexSequence<E> sequenza;
//private NodeSequence<E> sequenza;

public MiaSequenzaIncompleta()
{
sequenza = new ArrayIndexSequence<E>();
//sequenza = new NodeSequence<E>();
}

public void addFirst(E e) 
{
sequenza.addFirst(e);
}

public Position<E> first() 
{
return sequenza.first();
}

public E get(int i) 
{
return sequenza.get(i);
}

public E removeLast() {
return sequenza.removeLast();
}

public int size() {
return sequenza.size();
}

}

public class TestSequenzaIncompleta 
{
public static void main(String[] args) 
{

SequenzaIncompleta<Integer> s = new MiaSequenzaIncompleta<Integer>();
for (int i=10; i>0 ; i--)
s.addFirst(i);
System.out.println("Sequenza iniziale");
stampa(s);
System.out.println("Sequenza invertita");
inverti(s);
        stampa(s);
        
System.out.println("Rimuovi ultimo");
stampa(s);
System.out.println("Elemento rimosso ="+ s.removeLast());
System.out.println("Primo elemento ="+ s.first().element());
System.out.println("Inverti di nuovo");
inverti(s);
stampa(s);
}
private static <E> void stampa(SequenzaIncompleta<E> S){
for (int i=0; i<S.size() ; i++)
System.out.print(S.get(i)+ " ");
System.out.println("\n");
}
private static <E> void inverti(SequenzaIncompleta<E> S)
{
int n = S.size();
int count = 0;
for(int i=1; i<n; i++)
{
S.addFirst(S.get(i+count));
count++;
}
for(int i=1; i<n; i++)
S.removeLast();
}


//soluzione del prof.
/* private static <E> void inverti(SequenzaIncompleta<E> S)
    {
      int size = S.size();
      for(int i=1; i<size; i++) S.addFirst(S.get(2*i-1));
      for(int i=1; i<size; i++) S.removeLast();
    }
*/

}






3 commenti:

  1. un'altra implementazione di inverti:
    private static void inverti(SequenzaIncompleta S)
    {
    if (S.size() != 1)
    {
    E last = S.removeLast();
    inverti(S);
    S.addFirst(last);
    }
    }

    RispondiElimina
  2. Grande Gianluca, bella pulita la tua versione ricorsiva, senz'altro la migliore vista fino ad ora :)

    RispondiElimina
  3. e questo è come voleva il prof senza strutture dati aggiuntive

    private static void inverti(SequenzaIncompleta S) {
    int size = S.size();
    for (int i = 1; i<size; i++) S.addFirst(S.get(2*i-1));
    for (int i = 1; i< size; i++) S.removeLast();
    }

    RispondiElimina

Related Posts with Thumbnails