Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    271

    [c] lista inserimento in coda

    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

    codice:
    #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);
    	}
    }

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    codice:
    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;
        }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.