C_TP_Forth/pile.c

67 lines
1.2 KiB
C
Raw Permalink Normal View History

2022-12-08 06:11:40 +01:00
#include "pile.h"
#include <stdlib.h>
#include <stdio.h>
void init( struct Pile* p ) {
p->height = 0;
p->l = NULL;
}
void push( struct Pile* p, struct NumContainer i ) {
struct List* aux = p->l;
p->l = (struct List*)malloc(sizeof(struct List));
if (p->l == NULL) {
fprintf(stderr, "Error: Could not allocate memory for the next cell on the stack\n");
return;
}
p->l->next = aux;
p->l->i = i;
++(p->height);
}
struct NumContainer top( struct Pile* p ) {
if ( p->height == 0 ) {
fprintf(stderr, "Error: The stack has no element, cannot find top\n");
exit(1);
}
return p->l->i;
}
void print( struct Pile* p ) {
struct List* aux = p->l;
while (aux != NULL) {
printNum(aux->i);
printf(" ");
aux = aux->next;
}
/* printf("NULL"); */
}
void pop( struct Pile* p ) {
struct List* aux;
if ( p->height != 0 ) {
--(p->height);
aux = p->l;
p->l = p->l->next;
free(aux);
}
}
void end( struct Pile* p ) {
while (p->height != 0) {
pop(p);
}
}
void getlastnums( struct NumContainer* i, struct NumContainer* j, struct Pile* pile ) {
*j = top(pile);
pop(pile);
*i = top(pile);
pop(pile);
}