#include #include #include #include #include #include #include #include #include #include #include using namespace std; struct stack { int item; stack*link; }; void push(stack*&s,int newitem) // pushes newitem onto s { stack*temp = new stack; cout << "push " << newitem << endl; temp->item = newitem; temp->link = s; s = temp; } bool empty(stack*s) // returns true if s is empty, false otherwise { return s == nullptr; } int pop(stack*&s) // returns and deletes most recently inserted item { assert(not empty(s)); // error if you try to pop an empty stack int rslt = s->item; s = s->link; // memory leak return rslt; } int main() { stack*s = NULL; if(empty(s)) cout << "s is empty "; else cout << "s is not empty "; cout << endl; push(s,5); if(empty(s)) cout << "s is empty "; else cout << "s is not empty "; cout << endl; push(s,3); cout << pop(s) << endl; if(empty(s)) cout << "s is empty"; else cout << "s is not empty "; cout << endl; push(s,9); push(s,2); while (not empty(s)) cout << pop(s) << endl; if(empty(s)) cout << "s is empty "; else cout << "s is not empty "; cout << endl; return 1; }