Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- template<typename T>
- struct Node {
- T data;
- Node *next;
- Node(T data, Node *next) : data(data), next(next) {}
- };
- template<typename T>
- class Stack {
- public:
- Stack() : top(nullptr), level(0), max_size(10) {}
- Stack(int max_size) : top(nullptr), level(0), max_size(max_size) {};
- void push(T data);
- T pop();
- void display();
- bool isEmpty() { return level == 0; }
- bool isFull() { return level == max_size; }
- int geLevel() { return level; }
- int getMaxSize() { return max_size; }
- private:
- Node<T> *top;
- int level, max_size;
- };
- template<typename T>
- void Stack<T>::push(T data) {
- if(!isFull()) {
- Node<T> *newNode = new Node<T>(data, top);
- top = newNode;
- level++;
- } else {
- std::cerr << "stack overflow";
- }
- }
- template<typename T>
- T Stack<T>::pop() {
- if(!isEmpty()) {
- Node<T> *temp = top;
- T data = temp->data;
- top = top->next;
- level--;
- delete temp;
- return data;
- }
- std::cerr << "stack underflow";
- }
- template<typename T>
- void Stack<T>::display() {
- Node<T> *curr = top;
- while(curr != nullptr) {
- std::cout << curr->data << std::endl;
- curr = curr->next;
- }
- }
Add Comment
Please, Sign In to add comment