|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 7
|
[C] Problema lista circolare
Ciao a tutti!
Ho un problema con un programma implementato in C in cui devo leggere una lista circolare: quando provo ad effettuare il ciclo di lettura non riesco più ad uscirne, in quanto viene stampato infinite volte l'ultimo elemento della lista stessa. Questo è il codice da me scritto per l'introduzione degli elementi: Codice:
void inserisci_dati (tipo **head,tipo **tail)
{
tipo *pcorr;
pcorr=(tipo *)malloc(sizeof(tipo));
if(*head==NULL)
{
*head=pcorr;
(**head).next=*head; /* il campo prox punta a se stesso */
(**tail)=(**head);
}
else
{
(*pcorr).next=*head;
*head=pcorr;
(**tail).next=*head; /* l'ultimo elem. punta al primo */
}
return;
}
Codice:
void stampa(tipo **head,tipo **tail)
{
tipo *pcorr;
pcorr=*head;
do
{
printf("%s\n",(*pcorr).nome)
pcorr=(*pcorr).next;
}
while(pcorr!=(**tail).next);
}
d'uscita del while pcorr!=(*head), visto che leggo l'elemento in testa alla prima iterazione e subito dopo aggiorno pcorr, ma non funziona lo stesso. Qualcuno ha idea di come si faccia? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2781
|
Ma perchè hai usato dei doppi puntatori per l'head e la tail?
Il tipo "tipo" come l'hai definito? |
|
|
|
|
|
#3 | ||
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 7
|
Quote:
Codice:
void main(void) ... stampa(&head,&tail); ... Quote:
|
||
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2781
|
Quote:
|
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 7
|
Si, ma l'intento della mia richiesta era ricevere un consiglio su come far funzionare la stampa della lista...
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2781
|
Secondo me tanto per capirci meglio puoi iniziare a togliere i doppi puntatori, ti assicuro che dopo diventa tutto molto più chiaro, e poi non vedo dov'è che assegni un valore al nuovo elemento della lista.
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Ciao,
ho guardato piuttosto velocemente il codice in pausa pranzo. Perdonami se prendo fischi per fiaschi [quote=ramo102] Codice:
void inserisci_dati (tipo **head,tipo **tail)
{
tipo *pcorr;
pcorr=(tipo *)malloc(sizeof(tipo));
if(*head==NULL)
{
*head=pcorr;
(**head).next=*head; /* il campo prox punta a se stesso */
(**tail)=(**head);
}
else
{
(*pcorr).next=*head;
*head=pcorr;
(**tail).next=*head; /* l'ultimo elem. punta al primo */
}
return;
}
Tre considerazioni: 1 - l'ultimo elemento della tua lista punta a se stesso, non solo quando la lista e' di un solo elemento. 2 - nessun elemento ha nel campo next il valore NULL (beh, dirai, non mi interessa molto. Verissimo! era solo una considerazione 3 - mi sembra che a tail, nel caso if, non venga assegnato il puntatore ad un valore, ma si faccio una copia, valore x valore, dell'elemento puntato da head. Ciao
__________________
In God we trust; all others bring data |
|
|
|
|
|
#8 | |
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 7
|
Quote:
|
|
|
|
|
|
|
#9 | |
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 7
|
Quote:
|
|
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 7
|
Per favore qualcuno ha idea di cosa ci sia di bacato nel codice da me postato? Aiutoooooo!
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Jul 2006
Messaggi: 7
|
Grazie sottovento!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:58.



















