Lista: inserimento elemento in testa C

di il
3 risposte

Lista: inserimento elemento in testa C

Qual è il problema nella chiamata della funzione InserisciInTesta??
Errore:
incompatible type for argument 1 of `InserisciInTesta'
[#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef enum{TRUE,FALSE} boolean;

struct EL {
         int Info;
         struct EL *prox;
         };
         
  typedef struct EL ElemLista;
  typedef ElemLista *ListaDiElem;

ListaDiElem ProduciValoreIniziale (); //funzione inizializza lista
boolean ListaVuota(ListaDiElem Lista); //funzione per controllo lista vuota
void InserisciInTesta(ListaDiElem *Lista, int x);//funzione per inserire in testa
int main(int argc, char *argv[])
{
   
  ListaDiElem Lista1; //definizione variabili di tipo lista
  int x;
  Lista1=ProduciValoreIniziale(); //Inizializzazione lista1
  x=5;
InserisciInTesta(*Lista1,x);
  
  if (ListaVuota(Lista1)==TRUE){
                                printf("La lista e' vuota\n");
                                }else{
                                      printf("la lista non e' vuota\n");}
  
  
  
  
  system("PAUSE");	
  return 0;
}

ListaDiElem ProduciValoreIniziale() {
            return NULL;
}

boolean ListaVuota(ListaDiElem Lista){
        if(Lista==NULL) 
        return TRUE;
        else
        return FALSE;
}

void InserisciInTesta(ListaDiElem *Lista, int x){
     ElemLista *Punt;
     Punt=malloc(sizeof(ElemLista));
     Punt->Info=x;
     Punt->prox=*Lista;
     *Lista=Punt;
     }

3 Risposte

  • Re: Lista: inserimento elemento in testa C

    Devi mettere '& e non '*':
    
    ListaDiElem Lista1; //definizione variabili di tipo lista
    int x;
    Lista1=ProduciValoreIniziale(); //Inizializzazione lista1
    x=5;
    InserisciInTesta(&Lista1,x); // <--- da mettere '&' al posto di '*'
    
    if (ListaVuota(Lista1)==TRUE){
    printf("La lista e' vuota\n");
    }else{
    printf("la lista non e' vuota\n");}
    
  • Re: Lista: inserimento elemento in testa C

    Grazie 10000!!!
    Ma quando io voglio creare una lista, devo creare la struttura con info e puntatore e inizializzarla, e devo inserire gli elementi in questo modo?
    O questo serve solo a inserire elementi dopo aver già inserito altri elementi?
    Grazie...
  • Re: Lista: inserimento elemento in testa C

    Non necessariamente, infatti con la funzione di inserimento la lista è creata, l'importante è che appena dichiari una variabile di tio lista (punatore a ElemLista) lo inizializzi a 0. Puoi benissimo usare una funzione apposita che restituisce semplicemente un puntatore a ElemLista nullo:
    
    ElemLista* CreaLista(){ return NULL;}
    
    oppure in modo ancora più semplice:
    
    typedef ElemLista *Lista;
    Lista miaLista=NULL;  // <--- dichiaro la variabile 'miaLista' e la inizializzo a 0
    
Devi accedere o registrarti per scrivere nel forum
3 risposte