|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
[C] stack con liste
Scrivere una funzione che restituisca una nuova pila che contiene i valori di una pila in ingresso in ordine inverso. La pila originale non deve essere modificata.
Qualcuno di voi ha un idea di base su cui poi lavoro io di come non modificare lo stack iniziale? Perchè passando i valori da una pila all'altra e man mano cancellare la pila iniziale funge, ma così modifico la pila iniziale e non devo farlo grazie per l'aiuto |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sai il significato di visita anticipata e visita posticipata (di solito si applica agli alberi, ma può andare bene anche per le liste) ?
Qui hai due alternative: - fai una visita anticipata della lista originale e crei quella nuova con l'inserimento in testa - fai una visita posticipata della lista originale e crei quella nuova con l'inserimento in coda |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Oct 2006
Messaggi: 170
|
Mhh...mi dovresti spiegare questa faccenda della vista che non la conosco.
graize |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Visita...non vista
La visita è la valutazione del campo informazione del nodo... Avendo una lista la classica struttura di una funzione ricorsiva che scorre la lista può assumere queste due forme: Codice:
funzione(lista l)
{
(condizione di arresto)
funzione(l->next);
(elaborazione del campo informazioni del nodo)
}
funzione(lista l)
{
(condizione di arresto)
(elaborazione del campo informazioni del nodo)
funzione(l->next);
}
La seconda è una visita anticipata in quanto si valuta prima il campo informazioni e poi si fa la ricorsione. Se provi a sostituire (elaborazione del campo informazioni del nodo) con printf("%d\n", l->info); chiaramente nel primo caso verranno stampati gli interi a partire dall'ultimo, mentre nel secondo caso a partire dal primo. Il modo più logico per gestire uno stack con le liste è fare in modo che push faccia un inserimento in testa e pop faccia un'estrazione dalla testa. Quindi è chiaro che nella lista che rappresenta lo stack l'elemento che si trova in fondo dovrà essere rappresentato per primo nella lista risultante che dovrai produrre. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:52.



















