// // Created by Nils on 29.10.2023. // #ifndef STACK #define STACK #define SIZE 1000 #include #include struct stackFrame { int *fp; // Frame pointer int *sp; // Stack pointer int *bp; // Base pointer }; struct stack { int size; int currentFrame; struct stackFrame *frames[SIZE]; }; void printStack(struct stack *stack) { printf("Stack:\n"); for (int i = 0; i < stack->size; ++i) { printf("[%d] = %d\n", i, stack->frames[stack->currentFrame]->sp[i]); } } void push(struct stack *stack, unsigned int value) { struct stackFrame *currentFrame = stack->frames[stack->currentFrame]; *(currentFrame->sp) = value; currentFrame->sp++; } int pop(struct stack *stack) { struct stackFrame *currentFrame = stack->frames[stack->currentFrame]; currentFrame->sp--; return *(currentFrame->sp); } int peek(struct stack *stack, int steps) { // peek is pop without removing the value struct stackFrame *currentFrame = stack->frames[stack->currentFrame]; return *(currentFrame->sp - steps); } #endif