ori 0 Denunciar post Postado Junho 15, 2015 Estou tentando criar uma estrutura de dado que suporte um vetor de listas encadeadas, as listas guardam os ponteiros para os primeiros elementos das listas, ou seja, cada elemento do vetor é a cabeça de uma lista encadeada. // define elemento da lista typedef struct no { int info; struct no *prox; } No; // define tipo lista encadeada typedef struct { No *no; } Lista; // define tipo vetor de listas encadeadas typedef struct { Lista *lista1; } VetListas; A função para criação do nó e da lista ficaram assim: // cria um no, preenche o valor info, e aponta "->prox" para NULL Lista *criaNo(Lista *l, int info) { No *novo=(No*) malloc (sizeof(No)); novo->info=info; novo->prox=NULL; return(novo); } // cria dinamicamente um vetor de listas com "tamLista1" elementos VetLista *criaLista(int tamLista1, int tamLista2) { VetLista *_l=(Lista*)malloc(sizeof(Matriz)); int i; me->lista1 = (No*) malloc(tamLista1*sizeof(*No)); for (i=0;i<tam;i++) me->lista1[i]=NULL; return(_l); } Esta´ dando um erro de incompatibilidade, alguém pode me ajudar a enxegar meu erro?!?! int main() { VetLista *l = meCria(4); // cria vetor com 4 elementos/listas free(l); } Segue abaixo codigo completo: // CODIGO COMPLETO // #include <stdio.h> #include <stdlib.h> typedef struct no { int info; struct no *prox; } No; typedef struct { No *no; } Lista; typedef struct { Lista *lista1; } VetListas; Lista *criaNo(Lista *l, int info) { No *novo=(No*) malloc (sizeof(No)); novo->info=info; novo->prox=NULL; return(novo); } VetLista *criaLista(int tamLista1) { VetLista *_l=(Lista*)malloc(sizeof(Matriz)); int i; me->lista1 = (No*) malloc(tamLista1*sizeof(*No)); for (i=0;i<tam;i++) me->lista1[i]=NULL; return(_l); } int main() { VetLista *l = criaLista(4); // cria vetor com 4 elementos/listas free(l); Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 15, 2015 #include <stdio.h> #include <stdlib.h> struct no { int info; struct no * proximo; }; struct lista { struct no * HEAD; struct no * TAIL; // Por questões de praticidade. int tamanho; }; /* Criar n_listas, sem elementos */ struct lista * criar_listas(size_t n_listas) { struct lista * _tmp_lista = malloc(n_listas * sizeof(struct lista)); if (!_tmp_lista) { printf("[ERRO] Alocação de memória (@%s:%d)\n", __FILE__, __LINE__); exit(EXIT_FAILURE); } _tmp_lista->HEAD = NULL; _tmp_lista->TAIL = NULL; _tmp_lista->tamanho = 0; return _tmp_lista; } void adicionar(int info, struct lista * dest) { struct no * _tmp_no = malloc(sizeof(struct no)); if (!_tmp_no) { printf("[ERRO] Alocação de memória (@%s:%d)\n", __FILE__, __LINE__); } else { _tmp_no->info = info; _tmp_no->proximo = NULL; if (!dest->tamanho) { dest->HEAD = dest->TAIL = _tmp_no; } else { dest->TAIL->proximo = _tmp_no; dest->TAIL = _tmp_no; } dest->tamanho = dest->tamanho+1; } } void imprimir_lista(struct lista * src) { struct no * _tmp; for(_tmp = src->HEAD; _tmp != NULL; _tmp = _tmp->proximo) { printf("%d%c", _tmp->info, (_tmp->proximo == NULL)? '\n':' '); } } int main(void) { struct lista * col_listas = criar_listas(1); // cria "vetor" com 1 lista encadeada adicionar(-123, &col_listas[0]); adicionar(8712, &col_listas[0]); adicionar(39, &col_listas[0]); imprimir_lista(&col_listas[0]); free(col_listas); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites