• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mitrax

ajuda

7 mensagens neste tópico

boas,

Tenho o seguinte código no qual me tenho que basear para fazer um trabalho, só que estou com alguma dificuldade em perceber. Será que alguém me pode ajudar, principalmente no que respeita as estruturas e aos parâmetros das funções.

cps

typedef struct node_t 
{ 
  void *data; 
  struct node_t *previous; 
} node_t; 

typedef struct 
{ 
  node_t *last_inserted; 
  int n_elem; 
} list_t; 


/*************************************************************/ 
int list_init(list_t *list) 
{ 
if(list==NULL) 
  return -1; 

  list->n_elem=0; 
list->last_inserted=NULL; 
return 0; 
} 

int list_insert(list_t *list, void *data) 
{ 
if(list==NULL) 
  return -1; 

node_t *new_node; 
   
new_node=(node_t *) malloc(sizeof(node_t)); 
   if(new_node==NULL) 
  return(-1); 
            
new_node->data=data; 
new_node->previous=list->last_inserted; 
list->last_inserted=new_node; 
list->n_elem++; 

return(0); 
}/*************************************************************/ 

int list_print_all(list_t *list,void (*print_func)(void *data)) 
{ 
node_t *ptr; 

if(list==NULL) 
  return -1;  
  
ptr=list->last_inserted; 
while(ptr!=NULL) 
{ 
  print_func(ptr->data); 
  ptr=ptr->previous; 
} 

return 0; 
} 

void myprint(void *data) 
{ 
veiculo_t *ptr=(veiculo_t *) data; 
  
printf("Matricula: "); 
fwrite(ptr->matricula,6,1,stdout); 
printf(". Proprietario: %s\n", ptr->proprietario); 
} 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tem muito que saber.

Tens uma lista simplesmente ligada em que os elementos são do tipo node_t.

node_t é uma estrutura cujos elementos são um apontador para o nó anterior e um campo para guardar dados que podem ser de qualquer tipo.

list_t é uma estrutura cujos elementos são um apontador para o último elemento da lista a ser adicionado e o número de elementos que a lista tem.

Quanto aos métodos:

list_init recebe uma estrutura do tipo list_t e inicializa-a.

list_insert recebe uma estrutura do tipo list_t e um conteúdo para adicionar à lista. Cria um novo nó, com o conteúdo que foi passado como argumento e adiciona-o à lista que também foi passada.

list_print_all recebe uma estrutura do tipo list_t e um ponteiro para uma função que receba qualquer coisa como argumento. Percorre todos os elementos da estrutura passada como argumento e invoca a função passada como argumento, com o conteúdo de cada nó da lista como argumento.

myprint recebe qualquer coisa como argumento. Converte o argumento para o tipo veiculo_t e imprime no ecrã os campos  matrícula e proprietário.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só não percebi uma coisa.... Onde é que está definido o tipo veiculo_t?

Também nunca tinha visto funções com parâmetros que também são funções... Alguém explica?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

aqui está a estrutura que define o tipo veiculo_t:

typedef struct {

  char matricula[6];

  char *proprietario;

} veiculo_t;

A minha duvida principal tb está nas funções com parâmetros de funções(sinceramente nc tinha visto!!). E mto obrigado Saco!!! :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dúvida sobre o argumento ser um ponteiro para uma função? Sinceramente não sei que mais possa dizer... é isso mesmo, um dos argumentos é uma função, que depois pode ser chamada como qualquer outra...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só mais uma duvida, pretendo fazer uma função que retorne o registo mais antigo. como poderei fazer? terei que declarar o retorno da função como tipo da estrutura?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

só mais uma duvida, pretendo fazer uma função que retorne o registo mais antigo. como poderei fazer? terei que declarar o retorno da função como tipo da estrutura?

Sim, claro, se queres que ela retorne o registo mais antigo (que é uma estrutura...), tens que declarar o respectivo tipo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora