49 lines
1.1 KiB
C
Executable File
49 lines
1.1 KiB
C
Executable File
//
|
|
// Created by Nils on 29.10.2023.
|
|
//
|
|
#ifndef STACK
|
|
#define STACK
|
|
#define SIZE 1000
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
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
|