Una lista delle cose che non capisco...

Newton_1372
Sto cominciando a studiare le liste, e per "provare" ho scritto un programmino che mi legge tre interi e me le mette in una lista...a quanto pare però il programma è sbagliato...dov'è l'errore?


#include
#include
//Lista di tre elementi immessi sullo schermo

//Implementazione lista

struct EL{
int dato;
struct EL *next;
};

typedef struct EL ElementoLista;
typedef ElementoLista *IndirizzoElemento;


main(){
ElementoLista L1,L2,L3;
IndirizzoElemento lista=NULL,aux;

aux=malloc(sizeof(ElementoLista));
scanf("%d",L3.dato);
L3.next=lista;
lista=aux;

aux=malloc(sizeof(ElementoLista));
scanf("%d",L2.dato);
L2.next=lista;
lista=aux;

aux=malloc(sizeof(ElementoLista));
scanf("%d",L1.dato);
L1.next=lista;
lista=aux;
}



P.S. IL compilatore dà errore alle istruzioni come
scanf("%d",L2.dato) in quanto, dice lui, %d si aspetta argomenti di tipo *int mentre L2.dato è int (ma i puntatori non si indicavano con %p?)

Risposte
minomic
Ciao,
devi mettere

scanf("%d",&(L3.dato));


però è sbagliato proprio il modo in cui inserisci gli elementi nella lista. Se mi dai qualche minuto ti posto una versione corretta.

minomic
Ecco qui:

#include <stdio.h>
#include <stdlib.h>
//Lista di tre elementi immessi sullo schermo

//Implementazione lista

struct EL
{
    int dato;
    struct EL *next;
};

typedef struct EL ElementoLista;
typedef ElementoLista *List;


/* funzione che stampa una lista */
void stampa_lista(List l)
{
    while(l != NULL)
    {
        printf("%d\n", l->dato);
        l = l->next;
    }
}


/* funzione che inserisce un elemento in coda alla lista */
List ins_in_coda(List head, int elem)
{
    /* alloco il nuovo elemento e imposto i suoi campi */
    List new_elem = (List) malloc(sizeof(ElementoLista));
    new_elem->dato = elem;
    new_elem->next = NULL;

    /* se la lista e' vuota */
    if(head == NULL)
        return new_elem;

    /* scorro la lista fino all'ultimo elemento */
    List aux = head;
    while(aux->next != NULL)
        aux = aux->next;

    /* "incollo" il nuovo elemento */
    aux->next = new_elem;

    /* restituisco sempre la testa della lista */
    return head;
}


int main()
{
    List lista=NULL;
    int length, i, elem;

    printf("Quanti elementi vuoi inserire? ");
    scanf("%d", &length);

    /* riempimento della lista */
    for(i=0; i<length; ++i)
    {
        printf("Inserire il prossimo elemento: ");
        scanf("%d", &elem);
        lista = ins_in_coda(lista, elem);
    }

    stampa_lista(lista);

    return 0;
}


Facci sapere se hai dubbi.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.