Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ori

Dificuldade para definir o tipo de dado: Vetor de listas.

Recommended Posts

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


#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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.