Ir ao conteúdo

Ajuda com lista simplesmente encadeada sem cabeça


avl

Posts recomendados

Postado


struct container{
char* id_unico;
char* id_navio;
};

typedef struct container Container;


struct lista_container{
Container* Cont;
struct lista_container* prox;
};//Esse é o nó(ou celula) da lista

typedef struct lista_container lContainers;

lContainers* InsereContainer (lContainers* cont, Container* c){

lContainers* novo = (lContainers*)malloc(sizeof(lContainers));
novo->Cont = c;
novo->prox = cont;
return novo;


lContainers* RetiraContainer (lContainers* cont, Container* c){

lContainers* ant = NULL;
lContainers* p = cont;

while (p != NULL && p->Cont->id_unico != c->id_unico){
ant = p;
p = p->prox;
}

if (p == NULL){
return cont;
}

if (ant == NULL){
cont = p->prox;
}
else{
ant->prox = p->prox;
}
free(p->Cont);
free(p);
return cont;
}


struct navio{
char* id_navio;
lContainers* cont; //lista de containers que o navio transporta
};

typedef struct navio Navio;

struct lista_navios{
Navio* nav;
struct lista_navios* prox;
};

typedef struct lista_navios lNavios;

void InsereContainersNavio (lContainers* c, Navio* n){

lContainers* aux;
for(aux=c; aux!=NULL; aux=aux->prox){
if (aux->Cont->id_navio == n->id_navio){
n->cont = InsereContainer (n->cont,aux->Cont);
}
}
}

void Carrega_Navio (lContainers* c, Navio* nav){
InsereContainersNavio (c,nav);



Vou tentar explicar o trecho do codigo (nao postei todo):

Tenho uma lista simplesmente encadeada de containers, onde cada nó dessa lista contem um ponteiro para estrutura "Container" (que tem o seu id_unico e o id do navio para onde o container será carregado) e um ponteiro para o proximo nó.

Da mesma forma, tenho uma lista de navios, onde cada nó dessa lista contem uma estrutura "Navio" (que tem seu id e um ponteiro para sua lista de containers) e um ponteiro para o proximo nó.

O problema está na função "Carrega_Navio". Ela carrega um navio com os containers que contem seu id. Ela recebe uma lista de containers e o navio que será carregado. Quando a função acaba, o navio fica carregado certinho, mas os containers 'retirados' da lista de containers nao saem, eles continuam lá. Explicando melhor: quando acaba a função, o navio fica carregado certinho, mas quando eu mando imprimir a lista de containers que foi passado como parametro da função Carrega_Navio, ela continua intacta, como se nenhum container tivesse sido retirado de lá, e eu nao queria que acontecesse isso.

Por exemplo, tenho uma lista de containers: ls_cont = c1 (navio1) c2(navio1) c3(navio2) c4(navio2).

Vou carregar o navio 2: Carrega_Navio (ls_cont,navio2);

Quando mando imprimir a ls_cont, sai exatamente os mesmos.containers. O que eu queria que imprimisse é: c3(navio2) c4(navio2)

Alguem sabe como resolver? Agradeço a quem ajudar.

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!