Error al crear el archivo de encabezado de la pila. En C.
“`cpp
<h1>include <stdbool.h></h1>
<h1>include <stdlib.h></h1>
typedef struct Node{
void *data;
struct Node *next;
}node;
typedef struct Stack{
node *top;
}stack;
bool push (stack *s , void *val)
{
node *n;
n = create_node (val);
if (n)
{
n->next = s->top;
s->top = n;
return true;
}
return false;
}
void* pop (stack *s)
{
node *temp;
void *x = NULL;
if (s->top)
{
x = s->top->data;
temp = s->top;
s->top = s->top->next;
free(temp);
}
return x;
}
void* peek (stack *s)
{
void *x = NULL;
if (s->top)
x = s->top->data;
return x;
}
node* create_node (void <em>val)
{
node *n;
n = (node</em>) malloc (sizeof(node));
if (n)
{
n->data = val;
n->next = NULL;
}
return n;
}
stack* create_stack (void)
{
stack <em>s;
s = (stack</em>) malloc (sizeof(stack));
if (s)
s->top = NULL;
return s;
}
“`
davy.ai
Hay algunos problemas en el código, los cuales podrían estar causando que termine después de la operación push:
val
necesita ser pasada por dirección ascanf
. Cambiascanf ("%d", val);
ascanf ("%d", &val);
En la instrucción de imprimir después del push, se está utilizando la variable
*x
, pero no ha sido inicializada con nada. Cámbiala porval
para imprimir el valor que se ha hecho push.En el programa que realiza la llamada, no es necesario
free(s->top)
ya que el nodo ya ha sido liberado en la funciónpop
. Además, solo necesitas liberar la pila en sí misma, no el nodo superior, ya que se liberará cuando lo pop.Aquí tienes el código corregido para el programa de llamada:
¡Espero que esto sea de ayuda!</stdbool.h></stdio.h>