1
Hello, I have some questions that I will illustrate below: Having two double chained lists A and B with the structure
struct lista
{
Ponto* dado; /* dado = número */
struct lista *prox; /* ponteiro para o proximo elemento */
struct lista *ant; /* ponteiro para o elemento anterior */
};
how different between 1:
a->ant = b->ant;
a->prox = b->prox;
a->dado = b->dado;
and 2:
a = b;
Edit 1: Why of my doubt: I am making a code with insertionsort with chained lists. Where my error is from the line where I commented
/* preparing for the next looping */
My goal from this line is: List primeiro_definitive must store the value of Shortlist when it is in the first looping, but in the second looping Shortlist is changed and I do not want the first definitive list to be changed together, I want him to keep keeping the value he got when he went into the if by the end of the code, and I’m not being able to do that. The way it is, when the smaller list changes later, Primeiro_definitive ends up changing too.
Lista* lista_insertionsort(Lista* l)
{
Lista* primeiro = (Lista*)malloc(sizeof(Lista));
Lista* menor = (Lista*)malloc(sizeof(Lista));
Lista* p = (Lista*)malloc(sizeof(Lista));
Lista* primeiro_definitivo = (Lista*)malloc(sizeof(Lista));
primeiro_definitivo = l;
primeiro = l;
menor = l;
p = l;
int alterado = 0;
while(menor->prox != NULL)
{
printf("oi2\n");
//Encontra o menor
while(p != NULL)
{
if(menor->dado->x > p->dado->x)
menor = p;
p=p->prox;
}
printf("menor dado: %d", menor->dado->x);
/*
Nesta parte do código: menor aponta para o menor valor
p aponta para o ultimo elemento da lista
primeiro aponta para o primeiro que não foi alterado
*/
//troca de posição primeiro com menor
if(primeiro->dado->x != menor->dado->x)
{
if(primeiro->prox->dado->x == menor->dado->x)
troca_adjacentes(primeiro, menor);
else
troca_nao_adjacentes(primeiro, menor);
alterado = 1;
}
/* preparando para o proximo looping */
if(alterado == 1){
p = menor;
p->ant = menor->ant;
p->prox = menor->prox;
p->dado = menor->dado;
primeiro = menor->prox;
if(menor->ant == NULL){//caso seja o menor da lista inteira, ele será o retorno
primeiro_definitivo = menor;
}
}
else{
p = menor;
primeiro = primeiro->prox;
p->ant = primeiro->ant;
p->prox = primeiro->prox;
p->dado = primeiro->dado;
}
alterado = 0;
}
return primeiro_definitivo;
}
Your question is very confused. I couldn’t figure out what your question/doubt is. Try to explain in words, and in great detail what you are trying to do and what your doubts are
– Isac
Thank you, I added more information
– Capybara