1
   /* define a struct TAD lista */
struct lista {
    float info;         /* dado */
    struct lista *prox; /* ponteiro para o proximo elemento */
};
typedef struct lista Lista;
I have the struct above and the following int main down below:
int main(int argc, char **argv) {
    Lista *lista;
    /* cria a lista */
    lista = lista_cria();
    /* cria dados para inserir */
    float x = 1.0, y = 2.5;
    /* insere os dois pontos */
    lista = lista_insere(lista, x);
    printf("X (1.0) inserido...\n");
    lista = lista_insere(lista, y);
    printf("Y (2.5) inserido...\n");    
The function that inserts the value á struct:
Lista* lista_insere( Lista* l, float info )
{
    Lista* novo = (Lista*) malloc(sizeof(Lista));
    novo->info = info;
    novo->prox = l;
    return novo;
}
I’ve been racking my brain trying to make a printf on main but I’m not getting it. I’ve been trying to put in int main the following: 
Lista* p = lista;
printf("%f", p->info);
But the error appears "Dereferencing Pointer to incomplete type"
/*
 * principal.c Programa que testa a TAD Lista.
 */
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "lista.h"
int main(int argc, char **argv) {
    Lista *lista;
    /* cria a lista */
    lista = lista_cria();
    /* cria dados para inserir */
    float x = 1.0, y = 2.5;
    /* insere os dois pontos */
    lista = lista_insere(lista, x);
    printf("X (1.0) inserido...\n");
    lista = lista_insere(lista, y);
    printf("Y (2.5) inserido...\n");
    /* testa se estão na lista */
    if(lista_busca(lista, x) != NULL) {
        printf("Hoooray! Ao buscar encontrei X (1.0)...\n");
    } else {
        printf("ERRO! Ao buscar nao encontrei X (1.0)...\n");
    }
    if (lista_busca(lista, y) != NULL) {
        printf("Hoooray! Ao buscar encontrei Y (2.5)...\n");
    } else {
        printf("ERRO! Ao buscar nao encontrei Y (2.5)...\n");
    }
    /* remove um elemento da lista e testa se ele esta na lista */
    float z = 5.0;
    lista = lista_insere(lista, z);
    printf("Z (5.0) inserido...\n");
    float w = 3.3;
    lista = lista_insere(lista, w);
    printf("W (3.3) inserido...\n");
    printf("Impressão comum...\n");
    lista_imprime(lista);
    lista = lista_remove(lista, y);
    if(lista_busca(lista, y) == NULL) {
        printf("Hoooray! Ao remover não encontrei Y (2.5)...\n");
    } else {
        printf("ERRO! Ao remover nao encontrei Y (2.5)...\n");
    }
    lista = lista_remove(lista, z);
    if(lista_busca(lista, z) == NULL) {
        printf("Hoooray! Ao remover não encontrei Z (5.0)...\n");
    } else {
        printf("ERRO! Ao remover nao encontrei Z (5.0)...\n");
    }
    printf("Impressão recursiva...\n");
    lista_imprime_rec(lista);
    lista_destroi(lista);
    printf("Tudo Ok\n");
    return 0;
}
principal above
/*
 * lista.h
 * Definição da TAD Lista.
 */
#ifndef _LISTA_H_
#define _LISTA_H_
#include <stdbool.h>
/* define o tipo Lista, derivado da 'struct _lista' */
typedef struct lista Lista;
/* cria uma lista vazia, ou seja, retorna NULL */
Lista* lista_cria(void);
/* insere no começo da lista, retorna a lista atualizada */
Lista* lista_insere( Lista* l, float num );
/* retorna se a lista esta vazia (true), ou false caso contrario */
bool lista_vazia( Lista* l );
/* busca um elemento na lista e retorna-o caso ele seja encontrado */
Lista* lista_busca( Lista* l, float info );
/* percorre os elementos, imprimindo-os */
void lista_imprime( Lista* l );
/* percorre os elementos recursivamente, imprimindo-os */
void lista_imprime_rec( Lista* l );
/* remove da lista o elemento que contem 'info'. Se lista ficar vazia, retorna NULL.
   Se nao encontrou, retorna a lista 'l'.
   Senao, o elemento removido deve ser liberrado com free.
*/
Lista* lista_remove( Lista* l, float info );
/* libera a memória de cada nó da lista. */
void lista_destroi( Lista* l );
#endif
lista.h above
#include <stdio.h>
#include <stdlib.h>
#include "lista.h"
/* define a struct TAD lista */
struct lista {
    float info;         /* dado */
    struct lista *prox; /* ponteiro para o proximo elemento */
};
/* cria lista vazia */
Lista* lista_cria(void)
{
    return NULL;
}
/* retorna se a Fista esta vazia (true), ou false caso contrario */
bool lista_vazia( Lista* l )
{
    return (l == NULL);
}
/* insere no comeco da lista, retorna a lista atualizada */
Lista* lista_insere( Lista* l, float info )
{
    Lista* novo = (Lista*) malloc(sizeof(Lista));
    novo->info = info;
    novo->prox = l;
    return novo;
}
/* busca um elemento na lista e retorna-o caso ele seja encontrado */
Lista* lista_busca( Lista* l, float info )
{
    Lista* p = l;
    while(p != NULL) {
        if(p->info == info)
            return p;
        p = p->prox;
    }
    return NULL;
}
/* percorre os elementos, imprimindo-os */
void lista_imprime( Lista* l )
{
        Lista* p = l;
        while(p != NULL){
            printf("%f\n", p->info);
            p = p->prox;
        }
    printf("Elementos Impressos\n");
}
/* percorre os elementos recursivamente, imprimindo-os */
void lista_imprime_rec( Lista* l )
{
    //TODO Implementar
    printf("Erro!! Não implementado!\n");
}
/* remove da lista o elemento que contem 'info'. Se lista ficar vazia, retorna NULL.
   Se nao encontrou, retorna a lista 'l'.
   Senao, o elemento removido deve ser liberrado com free.
*/
Lista* lista_remove( Lista* l, float info )
{
    //TODO Implementar
    return l;
}
/* libera a memória de cada nó da lista. */
void lista_destroi( Lista* l )
{
    Lista* elem = l;
    while( lista_vazia(elem) == false ){
        Lista* t = elem->prox;
        free(elem);
        elem = t;
    }
}
lista.c above
what I want is just take the function list_print and put it in the main, but I’m not getting
Confirm that you have the structure declaration at the top even before it is used in any function
– Isac
Yes, I even created a function to print and it worked, the problem is only when I do at MAIN
– Capybara
This should have to do with the order. Put the code exactly as you have it from top to bottom. See here in Ideone your example working
– Isac