libflint/docs/stack.md

1.5 KiB

stack

LIFO (last in first out) stack structure

Structs

Stack is a linked list with stack-based operations available

#define Stack List

Functions

stack_init

Intializes the stack. The user is responsible for creating the initial Stack structure and freeing memory with stack_destroy(). destroy is a deallocation function for the members of Stack, pass NULL if the memory is stack-allocated

void stack_init(Stack *stack, void (*destroy)(void *data));

/* Usage */
Stack *stack = malloc(sizeof(Stack));

// Pass NULL for stack-allocated memory
stack_init(stack, NULL);

// Pass free or a custom freeing function for heap allocated memory
stack_init(stack, free);

stack_destroy

Destroys the nodes inside a Stack and calls the deallocation funciton on the data if one was provided. Does not destroy the list itself, that is left up to the user.

void stack_destroy(Stack *stack);

stack_push

Push a new element onto the top of the stack

int stack_push(Stack *stack, void *data);

stack_peek

Returns a void * to the top element of the stack. Does not remove the element

void *stack_peek(Stack *stack);

/* Usage */
// stack: 1 2 3
int *t = (int*)stack_peek(stack);
assert(*t == 3);
// stack: 1 2 3

stack_pop

Returns a void * to the top element of the stack and removes the element

int stack_pop(Stack *stack, void **data);

/* Usage */
// stack: 1 2 3
int *t = (int*)stack_peek(stack);
assert(*t == 3);
// stack: 1 2