¿La función de desencolado que trabaja con 2 colas presenta un error de segmentación?
La función debajo debe desencolar una estructura que consta de 2 colas. Cada vez que desencolamos la primera cola, su rear debe convertirse en el front de la segunda cola. Esencialmente, moviendo el primer elemento en la segunda cola a la primera cola para que sea su rear. He ideado el siguiente algoritmo:
“`
int dequeue(queue* Q1,queue* Q2){
node* temp;
if(Q1->rear=NULL){
return 0;
}
if(count<3){
temp=Q1->front;
Q1->front=Q1->front->next;
free(temp);
count–;
return 1;
}
if(count>=3){
temp=Q1->front;
Q1->front=Q1->front->next;
free(temp);
Q1->rear->next=Q2->front;
Q1->rear=Q1->rear->next;
Q2->front=Q2->front->next;
Q1->rear->next=NULL;
if(Q2->front=NULL){
Q2->rear=NULL;
}
count--;
return 1;
}
}
Da un segfault en Q1->rear->next=Q2->front; ¿Hay alguna otra forma de lograr esto?
davy.ai
Sí, hay una manera alternativa de lograr esto. En lugar de asignar
Q2->front
directamente aQ1->rear->next
, podemos crear un nuevo nodo paraQ2->front
y agregarlo aQ1->rear
. Esto se puede hacer utilizando la funciónenqueue()
.Aquí está la función
dequeue()
modificada:En esta función modificada, creamos un nuevo nodo
new_node
paraQ2->front
con los mismos datos queQ2->front
y luego lo agregamos aQ1
utilizando la funciónenqueue()
.Tenga en cuenta que también corregí la condición
if(Q1->rear=NULL)
aif(Q1->rear==NULL)
yif(Q2->front=NULL)
aif(Q2->front==NULL)
que causó el segfault. Esto se debe a que=
es el operador de asignación, mientras que==
es el operador de comparación.