// sl-4-BA : Der ADT Stack

#include "stack.h"

struct Stack {
  DataType value;
  StackPtr next;
};

void empty(StackPtr & s) {
  while (!is_empty(s)) { pop(s); }
  // s = 0; würde auch funktionieren, Speicher würde aber nicht freigegeben
}

bool is_empty(const StackPtr s) {
  return s==0; // Kurzform von if (s==0) { return true; } else { return false; }
}

void push(StackPtr & s, const DataType value) {
  StackPtr node = new Stack;
  node->value = value;
  node->next = s;
  s = node;
}

void pop(StackPtr & s) { // s darf nicht 0 sein!
  // die aufrufende Funktion muss ggf. mit is_empty(s) prüfen, ob s leer ist
  StackPtr tbd = s; // Zeiger für oberstes Element merken
  s = s->next;
  delete tbd;
}

DataType top(const StackPtr s) { // s darf nicht 0 sein!
  // die aufrufende Funktion muss ggf. mit is_empty(s) prüfen, ob s leer ist
  return s->value;
}
