Acerca del lenguaje C y las estructuras de datos, saque los elementos de la cola de la cadena en orden e imprima el valor de los elementos. El código es el siguiente.
Tu problema radica en el paso de parámetros de la función. Debido a que lo que pasas es un puntero, y cambias el puntero del puntero en la función, los parámetros reales externos no han cambiado, por lo que dirá memoria. No disponible (porque le dio la dirección de memoria del montón de malloc al parámetro formal en la función, pero el parámetro real de la función principal no recibió la dirección del montón de malloc) La forma de resolver este problema es cambiar LQUEUE* a LQUEUE** . No hay nada malo con la lógica, y el hecho de que no hay referencias en C++, esto es C++, no te confundas.
#include modificado
#include
#include
typedef int ElemType;
typedef struct qnode
{
datos ElemType;
struct qnode* siguiente;
}qnode;
typedef struct
{
struct qnode* delante;
struct qnode* detrás;
}LQUEUE;
void InitQueue(LQUE** q)
{
qnode* p = (qnode*)malloc(sizeof( qnode) ) ;
if (p == NULL)
salir(-2);
p->siguiente = NULL;
( *q)->siguiente = p;
(*q)->trasero = p;
(*q)->frontal = p;
}
void EnQueue(LQUEUE** q, ElemType x)
{
qnode* s = (qnode *)malloc(sizeof(qnode) ) ;
s->datos = x;
s->siguiente = NULL;
if ((*q)->front == NULL && ( *q)->trasero == NULL)
{
(*q)->trasero = (*q)->delantero = s;
}
else
(*q)->trasero->siguiente = s;
(*q)->trasero = s;
p>}
int Vacío(LQUE** q)
{
if ((*q)->front == NULL && (*q)->trasero == NULL)
Devuelve 1
else
Devuelve 0;
}
int delQueue(LQUE** q, ElemType x)
{
qnode *p;
if(Empty(q))< / p>
{
printf("\n ¡La cola es gratuita! ");
devuelve 0;
}
p = (*q)->frente;
x = p-> datos;
if ((*q)->trasero == (*q)->frontal)
(*q)->trasero = (*q)->frontal = NULL;
gratis(p);
devuelve 1;
}
int main ()
{
int n = 0;
int e = 0;
LQUEUE* l = (LQUEUE
*)malloc(sizeof(LQUEUE));
InitQueue(&l);
printf(" Ingrese el número, termine con 0:\n");
scanf("%d", &n);
while(n==0)
{
EnQueue(&l,n); p> p>
}
while(!Empty(&l))
{
delQueue(&l,e);
printf("%3d",e);
}
printf("\n");
devuelve 0;
}