#include <stdio.h>
#include <stdlib.h>

typedef struct stack
{
    int data;
    struct stack *next;
} stack;


void push_s(stack** s, int data)
{
    while (*s)
        s = &(*s)->next;
    
    *s = malloc(sizeof(**s));
    (*s)->data = data;
    (*s)->next = NULL;
}

void print_s(stack const *s)
{
    for (;s;s = s->next)
        printf("%p: data = %d, next = %p\n", s, s->data, s->next);
}

void free_s(stack **s)
{
    while (*s)
    {
        stack *tmp = *s;
        *s = tmp->next;
        free(tmp);
    }
}

int main (void)
{
    stack* s = NULL;
    
    push_s(&s,2);
    push_s(&s,4);
    push_s(&s,6);
    push_s(&s,8);
    
    print_s(s);
    free_s(&s);
    
    return 0;
}