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;
}
}