#include #include typedef char *stack_type; typedef struct stack_node stack_node; typedef struct stack stack; struct stack_node { stack_type value; stack_node *prev; }; struct stack { stack_node *last; int count; }; stack *stack_init() { stack *stack = calloc(1, sizeof(stack)); stack->last = NULL; stack->count = 0; return stack; } void stack_push(stack *stack, stack_type value) { stack_node *node = calloc(1, sizeof(stack_node)); node->value = value; node->prev = stack->last; stack->last = node; stack->count++; }; stack_type stack_pop(stack *stack) { stack_node *node = stack->last; // mums reiks sito adreso, kai valysim adresa stack_type value = node->value; stack->last = stack->last->prev; // ismetame paskutini elementa, paskutiniu elementu tampa pries paskutinis free(node); // isvalome atminti stack->count--; return value; }; int main(void) { stack *stekas = stack_init(); // testuojam stack_push(stekas, "1"); stack_push(stekas, "2"); stack_push(stekas, "3"); stack_push(stekas, "4"); printf("%s \n", stack_pop(stekas)); printf("%s \n", stack_pop(stekas)); printf("%s \n", stack_pop(stekas)); // dabar turetu buti likes vienas elementas stack_push(stekas, "5"); stack_push(stekas, "6"); printf("%s \n", stack_pop(stekas)); printf("%s \n", stack_pop(stekas)); printf("%s \n", stack_pop(stekas)); // stekas jau tuscias printf("%s \n", stack_pop(stekas)); // turetu nuluzti, jei viskas veikia ;]] return 0; }