PDA

Visualizza la versione completa : [c] lista inserimento in coda


dogo21sob
16-06-2009, 00:31
Sto scrivendo una libreria sulle operazioni principali che si fanno sulle liste, ma ho un problema con l'inserimento in coda... quando arriva all'inserimento in coda crasha il programma e non riesco a capire perchè... posto il codice intero così se qualcuno ha 2 minuti può provarlo direttamente... grazie in anticipo


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// definizione della struttura per la lista
struct nodolista
{
int Info;
struct nodolista *Next;
};
typedef struct nodolista LISTA;

// inizializza il primo elemento della lista a NULL
void Crea(LISTA **Head);

// inserisce un elemento in testa alla lista
void InserisciTesta(LISTA **Head, int val);

// inserisce un elemento in coda alla lista
void InserisciCoda(LISTA **Head, int val);

// stampa la lista
void Stampa(LISTA *Head);

// dealloca la memoria allocata per la struttura "LISTA"
void Dealloca(LISTA **Head);

main()
{
LISTA *Head;
int i, N, valore;

Crea(&Head);
printf("Quanti elementi vuoi inserire nella lista? ");
scanf("%i", &N);
for (i=0; i<N; i++) {
printf("Inserisci l'elmento [%i]: ", i+1);
scanf("%i", &valore);
InserisciTesta(&Head,valore);
}
Stampa(Head);
printf("Inserisci l'elmento da inserire in coda: ");
scanf("%i", &valore);
InserisciCoda(&Head,valore);
Stampa(Head);
Dealloca(&Head);
system("pause");
}

// inizializza il primo elemento della lista a NULL
void Crea(LISTA **Head)
{
*Head=NULL;
}

// inserisce un elemento in testa alla lista
void InserisciTesta(LISTA **Head, int val)
{
LISTA *Temp, *Next;

Next=*Head;
Temp=(LISTA *)malloc(sizeof(LISTA));
Temp->Info=val;
Temp->Next=Next;
*Head=Temp;
}

// inserisce un elemento in coda alla lista
void InserisciCoda(LISTA **Head, int val)
{
LISTA *Temp,*Tail;

Temp=(LISTA *)malloc(sizeof(LISTA));
Temp->Info=val;
Temp->Next=NULL;
if (*Head=NULL) {
*Head=Temp;
}
else {
Tail=*Head;
while (Tail->Next) {
Tail=Tail->Next;
}
Tail->Next=Temp;
}
}

// stampa la lista
void Stampa(LISTA *Head)
{
int i;

if (Head==NULL) {
printf("Errore: Impossibile Stampare, Lista Vuota\n");
}
else {
printf("Lista:\n");
while(Head!=NULL) {
printf("%d -> ", Head->Info);
Head=Head->Next;
}
printf("NULL\n");
}
}

// dealloca la memoria allocata per la struttura "LISTA"
void Dealloca(LISTA **Head)
{
LISTA *Temp;

while ((*Head)!=NULL)
{
Temp=*Head;
(*Head)=(*Head)->Next;
free(Temp);
}
}

Stoicenko
16-06-2009, 09:26
void InserisciCoda(LISTA **Head, int val)
{
LISTA *Temp,*Tail;

Temp=(LISTA *)malloc(sizeof(LISTA));
Temp->Info=val;
Temp->Next=NULL;
if (*Head=NULL) { //--> qui ci va il doppio =
*Head=Temp;
}
else {
Tail=*Head;
while (Tail->Next) {
Tail=Tail->Next;
}
Tail->Next=Temp;
}
}

Loading