#include #include class stack_of_ints { protected: struct entry { int value; entry * next; entry(int, entry *); }; entry * end; public: stack_of_ints(); bool empty(); void add(int); int take(); }; stack_of_ints :: entry :: entry(int v, entry * prev) { value = v; next = prev; } stack_of_ints :: stack_of_ints() { end = NULL; } bool stack_of_ints :: empty() { return end == NULL; } void stack_of_ints :: add(int v) { end = new entry(v, end); } int stack_of_ints :: take() { assert(end != NULL); int v = end->value; entry * old_end = end; end = end->next; delete old_end; return v; } void main() { stack_of_ints s; s.add(1); s.add(3); s.add(5); s.add(7); s.add(9); s.add(11); s.add(13); while (! s.empty()) cout << s.take() << "\n"; }