Advertisement
Guest User

Stacks

a guest
Dec 12th, 2019
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. // stack Array
  6. template<class T>
  7. class StackArray{
  8.  
  9. public:
  10.     StackArray(){
  11.        sz = -1;
  12.        object = new T[CAPACITY];
  13.     }
  14.  
  15.     T& top(){
  16.         return object[sz];
  17.     }
  18.  
  19.     T pop(){
  20.  
  21.        if(size() <= 0)
  22.         return NULL;
  23.  
  24.        T temp = object[sz];
  25.        sz--;
  26.        return temp;
  27.     }
  28.  
  29.     void push(T obj){
  30.  
  31.         object[++sz] = obj;
  32.     }
  33.  
  34.     int size(){return sz + 1;}
  35.  
  36.     bool isEmpty(){return (sz < 0);}
  37.  
  38.     ~StackArray(){
  39.  
  40.        delete[] object;
  41.     }
  42.  
  43. private:
  44.     T* object;
  45.     int sz;
  46.     const int CAPACITY = 1000;
  47.  
  48. };
  49.  
  50. template<class T>
  51. class Node{
  52.  
  53.   public:
  54.       T elem;
  55.       Node* next;
  56.  
  57.       Node(){}
  58.       Node(T elem,Node* next):elem(elem),next(next){}
  59. };
  60.  
  61. // stack List
  62. template<class T>
  63. class StackList{
  64.  
  65. public:
  66.     StackList(){
  67.        head = NULL;
  68.        sz = -1;
  69.     }
  70.  
  71.     T& top(){
  72.  
  73.        return *head;
  74.     }
  75.  
  76.     T pop(){
  77.  
  78.        if(isEmpty())
  79.         return NULL;
  80.  
  81.        Node<T>* old = head;
  82.        head = old->next;
  83.        sz--;
  84.        T elem = old->elem;
  85.        delete old;
  86.        return elem;
  87.     }
  88.  
  89.     void push(T obj){
  90.  
  91.       Node<T>* newNode = new Node<T>(obj,head);
  92.       head = newNode;
  93.       sz++;
  94.     }
  95.  
  96.     int size(){return sz+1;}
  97.  
  98.     bool isEmpty(){return (sz < 0);}
  99.  
  100.     ~StackList(){
  101.        if(!isEmpty()){
  102.         Node<T>* current = head;
  103.  
  104.         while(current != NULL){
  105.  
  106.             Node<T>* old = current;
  107.             current = current->next;
  108.  
  109.             // cout << "delete " << current->elem << endl; will be an error as current will be NULL and print a NULL value
  110.             // cout << "delete " << old->elem << endl; // correct line
  111.  
  112.             delete old;
  113.         }
  114.        }
  115.        cout << "end" << endl;
  116.     }
  117.  
  118. private:
  119.     int sz;
  120.     Node<T>* head;
  121.  
  122. };
  123.  
  124. // Queue Array
  125. template <class T>
  126. class QueArray{
  127.  
  128. public:
  129.     QueArray(){
  130.  
  131.       object = new T[CAPACITY];
  132.       sz = -1;
  133.       f = 0;
  134.       r = 0;
  135.     }
  136.  
  137.     T& front(){
  138.  
  139.        return object[f];
  140.     }
  141.  
  142.     T deque(){
  143.  
  144.        if(isEmpty())
  145.         return NULL;
  146.  
  147.        T old = object[f];
  148.        f = (f + 1) % CAPACITY;
  149.        sz--;
  150.        return old;
  151.     }
  152.  
  153.     void enque(T obj){
  154.  
  155.        object[r] = obj;
  156.        r = (r + 1) % CAPACITY;
  157.        sz++;
  158.     }
  159.  
  160.     int size(){return sz + 1;}
  161.  
  162.     bool isEmpty(){return (sz < 0);}
  163.  
  164.     ~QueArray(){
  165.  
  166.        delete[] object;
  167.     }
  168.  
  169. private:
  170.     T* object;
  171.     int f; // front
  172.     int r; // rear
  173.     int sz;
  174.     const int CAPACITY = 20;
  175. };
  176.  
  177. int main()
  178. {
  179.     StackArray<char> charStack;
  180.     charStack.push('A');
  181.     charStack.push('D');
  182.     charStack.push('A');
  183.     charStack.push('M');
  184.  
  185.     for(int i = 0; i < 4; ++i)
  186.         cout << charStack.pop();
  187.  
  188.     cout << endl << "==============================" << endl;
  189.  
  190.     QueArray<char> charQue;
  191.     charQue.enque('H');
  192.     charQue.enque('E');
  193.     charQue.enque('L');
  194.     charQue.enque('O');
  195.  
  196.     cout << charQue.size() << endl;
  197.  
  198.     for(int i = 0; i < 4; ++i)
  199.         cout << charQue.deque();
  200.  
  201.     cout << charQue.size() << endl;
  202.  
  203.     cout << "=================" << endl;
  204.  
  205.     StackList<char> charList;
  206.     charList.push('H');
  207.     charList.push('E');
  208.     charList.push('L');
  209.     charList.push('O');
  210.  
  211.     cout << "size " << charList.size() << endl;
  212.  
  213.     for(int i = 0; i < 4; ++i)
  214.         cout << charList.pop();
  215.  
  216.     cout << endl;
  217.  
  218.     cout << "size " << charList.size() << endl;
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement