Salve a tutti.
Ho creato questo programmino che dovrebbe eliminare da una lista concatenata tutti i nodi contenenti una data chiave.
Il programma compila senza problemi ma in output mi restituisce simboli anzichè le varie stringhe accettate.
Ho provato a debuggare con il debugger di codeblocks ma nn riesco a capire cosa non va!
Se qualcuno nota l'errore e può comunicarmelo, ne sarei felice! Grazie
codice:#include <stdio.h> #include <stdlib.h> #include <string.h> struct Nodo { char* chiave; struct Nodo *prec, *succ; }; typedef struct Nodo nodo; nodo *Cancella_Nodo(nodo*a); void Stampa_nodo_str(nodo *a); nodo *Inserisci_strings(nodo *a, char *k); //crea dei nodi con la stringa k int main() { nodo *p; nodo *head=NULL; head=Inserisci_strings(head,"ciao1"); head=Inserisci_strings(head,"ciao"); head=Inserisci_strings(head,"marco"); head=Inserisci_strings(head,"marco"); head=Inserisci_strings(head,"ciao"); head=Inserisci_strings(head,"ciao"); p=head; while(p != NULL) { if(strcmp(p->chiave, "ciao1") == 0) { p=Cancella_Nodo(p); } else { p=p->succ; } } Stampa_nodo_str(head); return 0; } //Stampa tutti i nodi di una lista di tipo stringa void Stampa_nodo_str(nodo *a) { int lunghezza; nodo *p; int i=0; if(a==NULL) { printf("La lista e vuota"); exit(-1); } p=a; while(p != NULL) { i=0; lunghezza=strlen(p->chiave); while(i<lunghezza) { printf("%c", p->chiave[i]); i++; } printf("\n"); p=p->succ; } } //inserisce nodi contenenti stringhe(VERIFICATA) nodo *Inserisci_strings(nodo *a, char *k) { nodo *temp; int lunghezza; int i=0; nodo *p; lunghezza=strlen(k); temp=malloc(sizeof(nodo)); temp->succ=NULL; temp->chiave=malloc(sizeof(char)*lunghezza+1); while(i<lunghezza) { temp->chiave[i]=k[i]; i++; } temp->chiave[i]='\0'; if(a == NULL) { temp->prec=NULL; a=temp; return a; } else { p=a; while(p->succ != NULL) { p=p->succ; } p->succ=temp; temp->prec=p; return a; } } nodo *Cancella_Nodo(nodo*a) { nodo *t; //Il primo della lista if(a->prec==NULL) { t=a->succ; t->prec=NULL; a->succ=NULL; free(a->chiave); free(a); a=t; return a; } //Alla fine if(a->succ==NULL) { a->prec->succ=NULL; a->prec=NULL; a->succ=NULL; free(a->chiave); free(a); return NULL; } //Il nodo al centro else { t=a->succ; a->prec->succ=t; t->prec=a->prec; a->succ=NULL; a->prec=NULL; free(a->chiave); free(a); a=t; return a; } }

.
Rispondi quotando