Stampare elementi pila

di il
1 risposte

Stampare elementi pila

Salve, come si stampano gli elementi della pila?
import java.util.*;
public class Stack<E> {
  private NodoStack cima;
  
  private class NodoStack {  
  E dato;
  NodoStack pros;    
  }
  
  public Stack(){  
  cima = null;
  }
  
  public void push (E o) {  
  NodoStack t = new NodoStack();
  t.dato = o;
  t.pros = cima;
  cima = t;    
  }
  
  public E pop () {  
  if (cima == null)
  throw new EmptyStackException();
  else{
  E risultato = cima.dato;
  cima = cima.pros;
  return risultato;  
   }  
  }
  
  public boolean empty (){
  return cima == null;
  }

  public static void main(String[] args){
  
  Stack uno = new Stack();
  uno.push(3);
  uno.push(5);
    
  }
}

1 Risposte

  • Re: Stampare elementi pila

    FlipFlop ha scritto:


    come si stampano gli elementi della pila?
    Ci sono diverse questioni da valutare prima. Innanzitutto dipende da quale ordine ti serve per la stampa. Dato che la sequenza dei nodi è uni-direzionale e hai solo il "cima", se parti da cima e scorri i nodi con il "pros", l'ordine che potresti stampare è quello di uscita (quello che farebbe il pop(), in sostanza). Se vuoi il contrario, ovvero partire dal primo nodo pushato, allora vanno fatti altri ragionamenti, tra cui ad esempio rendere la sequenza bi-direzionale e tenersi anche il "fondo" (oltre che cima).

    Ma c'è anche una questione più di "design" generale. Ora come ora hai fatto tutto quanto (compreso il main) dentro la stessa classe Stack. Significa che il "cima", pur essendo private sarebbe perfettamente accessibile direttamente nel main avendo ovviamente il riferimento ad un oggetto Stack. Nel main uno.cima sarebbe lecito.
    In uno scenario più corretto/realistico, NON è così e non dovrebbe essere così. Il "cima" dovrebbe restare nascosto e non accessibile dall'esterno. Quindi la questione è cosa/quanto vuoi esporre all'esterno per poter fare una iterazione sui nodi ai fini di una stampa (o qualunque altra cosa possa servire).
    Un conto sarebbe mettere in Stack un metodo es. stampa() che accede quindi internamente al cima e ai nodi facendo appunto solo la stampa. Un altro conto sarebbe se vuoi rendere scorribili i nodi dall'esterno della classe ma SENZA esporre cima/nodi, e in questo caso dovresti implementare il noto design pattern "Iterator".
Devi accedere o registrarti per scrivere nel forum
1 risposte