DOMANDA [C] eliminazione in coda in una lista

Pubblicità

gazel

Nuovo Utente
Messaggi
9
Reazioni
0
ciao a tutti volevo chiedervi aiuto con il seguente codice, tutte le volte che cerco di eliminare gli elementi della lista in coda ricevo un messaggio "core dumped" ma non riesco a capire dove sta il problema sbaglio a eliminare i coda?
C:
#include <stdio.h>
#include <malloc.h>
struct piano{
unsigned short int livello;
struct piano *ponte;
};
void stampa_inverso(struct piano *l);
int main() {
struct piano *scorri,*tail, *head;
unsigned short int n,d;
//creao l'ultimo della
printf("inserisci il numero di torri\n");
scanf("%hd", &n );
scorri=(struct piano*)malloc(sizeof(struct piano));
scorri->livello=1;
scorri->ponte=NULL;
tail=scorri;
head=scorri;//puntatore che rimane fermo al primo della lista
scorri=NULL;
for (int i=0;  i< n-1; i++) {
  scorri=(struct piano*)malloc(sizeof(struct piano));
  scorri->livello=2+i;
  scorri->ponte=NULL;
  tail->ponte=scorri;
  tail=scorri;
  scorri=NULL;
}
//stampa in ordine
/*while ((*head).ponte!=NULL) {
  printf("livello=%hd\n", (*head).livello);
  head=head->ponte; //faccio avanzare scorri di 1 fino farlo a raggiungere al'ultima coda
}*/
//stampo al contrario
     printf("                    _______\n");
for (int i=0; i<n ;i++) {
      scorri=head;
      if (head==tail) {//la testa scritta com ultima
        printf("                    |     |   \n");
        printf("                    |  %hd  |   \n",tail->livello);
        printf("                    |_____|   \n");
    } else {
      while (scorri->ponte!=tail) {
        scorri=scorri->ponte;
    }
    printf("                    |     |   \n");
    printf("                    |  %hd  |   \n",tail->livello);
    printf("                    |_____|   \n");
    tail=scorri;
      }
  }
printf("inserisci il numero di torri da eliminare\n");
scanf("%hd", &d);
for (int z = 0; z < d; z++) {//eliminazione in coda
  if (head==tail) {
                  free(head);
                  }
                  while (scorri->ponte!=tail) {
                  scorri=scorri->ponte;
                  }
                  free(scorri->ponte);
                  scorri->ponte=NULL;
                  tail=scorri;
}
  return 0;
}
 
Si, la parte dove elimini gli elementi ha problemi, nel primo ciclo while la variabile scorri non è inizializzata. Quello è il primo errore che vedo, ce ne possono essere altri e non ho controllato la strategia: perché hai due cicli innestati?
 
Si, la parte dove elimini gli elementi ha problemi, nel primo ciclo while la variabile scorri non è inizializzata. Quello è il primo errore che vedo, ce ne possono essere altri e non ho controllato la strategia: perché hai due cicli innestati?
il mio intentoo è quello di eliminare un nodo della lista alla volta per quante volte chiesto dall'utente
 
il mio intentoo è quello di eliminare un nodo della lista alla volta per quante volte chiesto dall'utente
Ah, vedo il problema, la tua lista non e' double linked quindi per eliminare dalla coda devi ogni volta trovare la coda (che spreco). Ad ogni modo, devi inizializzare la variabile scorri, come ti ho gia' detto la usi senza inizializzarla. Devi inoltre essere sicuro che la variabile tail sia aggiornata, ma non ti serve a nulla in quanto per trovare la fine basta che guardi quando il membro 'ponte' e' nullo.
 
Ah, vedo il problema, la tua lista non e' double linked quindi per eliminare dalla coda devi ogni volta trovare la coda (che spreco). Ad ogni modo, devi inizializzare la variabile scorri, come ti ho gia' detto la usi senza inizializzarla. Devi inoltre essere sicuro che la variabile tail sia aggiornata, ma non ti serve a nulla in quanto per trovare la fine basta che guardi quando il membro 'ponte' e' nullo.
grazie mille dell'aiuto
 
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top