Similar with: Queue, but LIFO
#include <bits/stdc++.h>
using namespace std;
class StackNode
{
public:
int data;
StackNode *next;
};
StackNode *newNode(int data)
{
StackNode *Node = new StackNode();
Node->data = data;
Node->next = nullptr;
return Node;
}
bool isEmpty(StackNode *root)
{
return root == nullptr;
}
void push(StackNode **root, int data)
{
StackNode *nNode = newNode(data);
nNode->next = *root;
*root = nNode;
cout << data << " pushed to stack\n";
}
int pop(StackNode **root)
{
if (isEmpty(*root))
{
return -1;
}
StackNode *temp = *root;
*root = (*root)->next;
int data = temp->data;
delete temp;
return data;
}
int peek(StackNode *root)
{
if (isEmpty(root))
{
return -1;
}
return root->data;
}
int main()
{
StackNode *root = nullptr;
push(&root, 10);
push(&root, 20);
push(&root, 40);
cout << "Top element is " << peek(root) << endl;
while (!isEmpty(root))
{
cout << peek(root) << " ";
pop(&root);
}
}