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