Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Lista <-- Pila, Coda

Precedente
SUPERIORE
Successiva

Dovendo realizzare le classi

Stack

bulletMetodi pubblici: empty(), full(), size(), push(), pop(), top()

Coda

bulletMetodi pubblici: vuota(), piena(), lunga(), accoda(), servi(), primo()

si può osservare che c'è una quasi completa corrispondenza sia nelle strutture dati (...) che nei metodi (accettando di rinominarli). Rimane la distinzione tra push() e accoda().

Si presenta l'opportunità di utilizzare una superclasse

Lista

bulletMetodi pubblici: vuota(), piena(), lunga(), inserisci(), togli(), primo()

nella quale il metodo inserisci() non può essere implementato e quindi sarà abstract.

public abstract class Lista
{
   protected int    elementiMax;
   protected Object lista[];
   protected int    posizione;

   public Lista(int n)
   {
      elementiMax=n;
      lista=new Object[elementiMax];
      posizione=-1;
   }

   public int lunga()
   {
      return posizione+1;
   }
   public boolean vuota()
   {
      return (lunga() == 0);
   }
   public boolean piena()
   {
      return (lunga() == elementiMax);
   }
   public Object primo()
   {
      if(vuota())
         throw new ArrayIndexOutOfBoundsException("Lista vuota!");
      else 
         return lista[posizione];
   }
   public Object togli()
   {
      Object temp=primo();
      posizione--;
      return temp; 
   }

   public abstract void inserisci(Object obj);
}

La classe Pila estende la classe Lista implementando il metodo astratto inserisci()

public class Pila extends Lista
{
   public Pila(int n)
   {
      super(n); 
   }

   public void inserisci(Object obj)
   {
      if(piena())
         throw new ArrayIndexOutOfBoundsException("Lista piena!");
      else
         lista[++posizione]=obj;
   }
}

La classe Coda estende la classe Lista implementando il metodo astratto inserisci()

public class Coda extends Lista
{
   public Coda(int n)
   {
      super(n); 
   }

   public void inserisci(Object obj)
   {
      if(piena())
         throw new ArrayIndexOutOfBoundsException("Lista piena!");
      else
      { 
         for(int i=posizione; i >= 0; i--)
            lista[i+1]=lista[i];
         lista[0]=obj;
         posizione++;
      }
   }
}

Lista <-- Pila, Coda - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva