[C++]Pila,dubbio implementazione

di il
2 risposte

[C++]Pila,dubbio implementazione

Buonasera.
Ho un dubbio quando definisco l'implementazione della push di una pila.
Il dubbio è se devo aggiungere il controllo if(i==MAX), dentro la push, oppure è una cosa che si fa fuori la push(i è il numero di elementi della pila, MAX è il numero massimo che la pila può contenere).
La stesso dubbio è per il controllo i=(i<MAX)?(i+1):MAX; devo farlo qui oppure devo aggiungere un semplice i++, e il controllo va fatto fuori.
cioè, così:

bool push(Base* x){
if(i==MAX){                                                          //QUI
return false;}
   else{
Nodo*n=new Nodo;
n->a=x;
if(testa==0){
  testa=n;
            	n->next=NULL;
            	i=(i<MAX)?(i+1):MAX;
			}else{
				n->next=testa;
				testa=n;
				i=(i<MAX)?(i+1):MAX;             //QUI
			}
			return true;
       }
}
Oppure questo è più corretto?

bool push(Base* x){
	    Nodo*n=new Nodo;
	     n->a=x;
            if(testa==0){
            	testa=n;
            	n->next=NULL;
            	i=(i<MAX)?(i+1):MAX;
			}else{
				n->next=testa;
				testa=n;
				i++;
			}
			return true;
  }
Grazie

2 Risposte

  • Re: [C++]Pila,dubbio implementazione

    Il controllo va fatto all'interno della push() proprio per nascondere i dettagli implementativi al chiamante: ora stai verificando come limite massimo una (presumo) costante MAX ma magari in futuro potresti decidere di rendere questo dinamico.
    Comunque non capisco a cosa ti serva MAX dal momento che ogni elemento viene allocato... piuttosto io controllerei se la new del nuovo nodo ti restituisce un valore diverso da NULL....
  • Re: [C++]Pila,dubbio implementazione

    Il controllo lo faccio per non superare il numero massimo di elementi, se sono massimo 3 e cerco di aggiungere un 4o non lo aggiunge. E' inutile?
    okok il controllo sulla new lo aggiungo, l'eccezione è bad_alloc giusto?
Devi accedere o registrarti per scrivere nel forum
2 risposte