Ho un problema con la lista linkata ordinata alfabeticamente. Quando una parola deve essere inserita in testa, la inserisce senza problemi, ma quando deve essere inserita in mezzo o in coda, non la inserisce in un nuovo nodo, ma in uno preesistente cancellando così la parola che c'era prima. Ad esempio se inserisco cane e poi abaco mi visualizza giustamente:
abaco
cane
Quando poi inserisco zembra la lista risulta essere:
abaco
zebra
Qualcuno sa aiutarmi?
codice:#include <stdio.h> #include <iostream> #include <stdlib.h> #define MAX_DIM 20 struct Elenco; typedef Elenco * puntElenco; typedef struct Elenco{ char info[MAX_DIM]; puntElenco next; } Elenco; puntElenco inserisci(puntElenco L, char*word){ puntElenco q; q=(puntElenco)malloc(sizeof(Elenco)); strcpy(q->info,word); q->next=L; return(q); } puntElenco InserisciElementoInLista(puntElenco L,char*parola){ puntElenco q=L, prec; int PosTrovata=0; if(q==NULL){ q=inserisci(L,parola); return(q); } if(strcmp(q->info,parola)==1){ q=inserisci(L,parola); return q; } prec=q; while((q->next!=NULL) && (PosTrovata==0)){ if(strcmp(q->info,parola)==-1){ prec=q; q=q->next; } else PosTrovata=1; } prec->next=inserisci(q->next,parola); return (L); } void VisualizzaLista(puntElenco L){ puntElenco q=L; printf("\nLista parole:\n\n"); while(q!=NULL){ printf("%s\n",q->info); q=q->next; } printf("\n"); } main (){ puntElenco el_parole; el_parole = NULL; int scelta,a=1,vocali=0,i; char word[MAX_DIM]={'\0'},lunga[MAX_DIM]={'\0'}; do{ system("cls"); printf("SCELTA OPERAZIONE \n"); printf("\nPREMI 1:-----------INSERISCI PAROLA---------------------\n"); printf("PREMI 2:-----------VISUALIZZA LISTA-----------------\n"); printf("PREMI 3:----------------USCITA-----------------\n"); printf("\nScelta: "); scanf("%d",&scelta); if(scelta==1){ printf("Digita la parola da inserire: "); scanf("%s",word); el_parole=InserisciElementoInLista(el_parole,word); } if(scelta==2) VisualizzaLista(el_parole); if(scelta==3) a=0; if(scelta!= 1 && scelta!= 2 && scelta!= 3) printf("\nScelta non valida\n\n"); system("PAUSE"); } while(a!=0); return 0; }

Rispondi quotando