es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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;
}
“`

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas en el código, los cuales podrían estar causando que termine después de la operación push:

    1. La variable val necesita ser pasada por dirección a scanf. Cambia scanf ("%d", val); a scanf ("%d", &val);
    2. 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 por val para imprimir el valor que se ha hecho push.

    3. En el programa que realiza la llamada, no es necesario free(s->top) ya que el nodo ya ha sido liberado en la función pop. 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:

    #include <stdio.h>
    #include <stdbool.h>
    #include "mystack.h"
    
    int main()
    {
        stack *s = NULL;
        int val;
        bool res;
    
        s = create_stack ();
        printf ("Ingrese el valor a hacer push: ");
        scanf ("%d", &val);
        res = push (s , &val);
    
        if (res)
            printf ("...HIZO PUSH DE %d EN LA PILA...\n", val);
        else
            printf ("...DESBORDAMIENTO DE LA PILA...\n");
        free(s);
        return 0;
    }
    

    ¡Espero que esto sea de ayuda!</stdbool.h></stdio.h>

Comments are closed.