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