Advertisement
VictoriaLodochkina

lab 4 try2

Nov 8th, 2020
628
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.30 KB | None | 0 0
  1. #pragma once
  2. #include <iostream>
  3. #include <conio.h>
  4. using namespace std;
  5. template <class T>
  6. class Node
  7. {
  8.     Node* next;
  9.     T data;
  10.     template <typename U>
  11.     friend class Stack;
  12. };
  13.  
  14.  
  15. template <class T>
  16. class Stack
  17. {
  18. private:
  19.     Node<T>* pTop;
  20.     Node<T>* pNEtop;
  21. public:
  22.    
  23.     Stack()
  24.     {
  25.         pTop = nullptr;
  26.         pNEtop = nullptr;
  27.     }
  28.  
  29.     Stack(Node<T>* SL)            
  30.     {
  31.         if (SL == nullptr)
  32.         {
  33.             pTop = nullptr;
  34.             pNEtop = nullptr;
  35.             return;
  36.         }
  37.         this->pTop = SL;  
  38.         this->pNEtop = SL;
  39.         this->next = nullptr;
  40.     }
  41.  
  42.     void Push(T data)///////////////////////////////////////////////////////////////
  43.     {
  44.         Node<T>* p;
  45.         p = new Node<T>;
  46.         p->data = data;//****************
  47.         p->next = pTop;
  48.         pTop = p;
  49.     }
  50.     Stack(/*const*/ Stack& SL)
  51.     {
  52.         Node<T>* p;
  53.         Node<T>* p2;
  54.         Node<T>* p3;
  55.  
  56.        
  57.         pTop = nullptr;
  58.         p3 = nullptr;
  59.  
  60.         p = SL.pTop;
  61.         while (p != nullptr)
  62.         {
  63.             /*p2 = new Node<T>;
  64.             p2->data = p->data;//********
  65.             p2->next = nullptr;
  66.             if (pTop == nullptr)
  67.             {
  68.                 pTop = p2;
  69.                 p3 = p2;
  70.             }
  71.             else
  72.             {
  73.                 p3->next = p2;
  74.                 p3 = p3->next;
  75.             }
  76.             p = p->next;*/
  77.             p2 = new Node<T>;
  78.             p2->data = p->data;
  79.             p2->next = nullptr;
  80.             this->Push(p2->data);
  81.             p = p->next;
  82.         }
  83.     }
  84.  
  85.  
  86.     /*void Push(T data)///////////////////////////////////////////////////////////////
  87.     {
  88.         Node<T>* p;
  89.             p = new Node<T>;
  90.         p->data = data;//****************
  91.         p->next = pTop;
  92.         pTop = p;
  93.     }*/
  94.  
  95.  
  96.     void Empty()
  97.     {
  98.         Node<T>* p;
  99.         Node<T>* p2;
  100.  
  101.         p = pTop;
  102.  
  103.         while (p != nullptr)
  104.         {
  105.             p2 = p;
  106.             p = p->next;
  107.             delete p2;
  108.         }
  109.         pTop = nullptr;
  110.     }
  111.  
  112.     Stack<T>& operator=(/*const*/ Stack<T>& LS)///////////////////////////////////////////
  113.     {
  114.         if (pTop != nullptr) Empty();
  115.  
  116.         Node<T>* p;
  117.         Node<T>* p2;
  118.         Node<T>* p3;
  119.         pTop = nullptr;
  120.         p3 = nullptr;
  121.  
  122.         p = LS.pTop; // указатель p двигается по списку SL.pTop->...
  123.  
  124.  
  125.         while (p != nullptr)
  126.         {
  127.            
  128.             p2 = new Node<T>;
  129.             p2->data = p->data;
  130.             p2->next = nullptr;
  131.             if (pTop == nullptr) // создать стек
  132.             {
  133.                 pTop = p2;
  134.                 p3 = p2;
  135.             }
  136.             else
  137.             {
  138.                 p3->next = p2;
  139.                 p3 = p3->next;
  140.             }
  141.  
  142.             //  Перейти на следующий элемент
  143.  
  144.             p = p->next;
  145.         }
  146.         return *this;
  147.     }
  148.  
  149.  
  150.     void Print(const char* objName)
  151.     {
  152.         cout << "Object: " << objName << endl;
  153.         if (pTop == nullptr)
  154.             cout << "stack is empty." << endl;
  155.         else
  156.         {
  157.             Node<T>* p; // дополнительный указатель
  158.             p = pTop;
  159.             while (p != nullptr)
  160.             {
  161.                 cout << p->data << "\t";
  162.                 p = p->next;
  163.             }
  164.             cout << endl;
  165.         }
  166.     }
  167.  
  168.    
  169.     ~Stack()
  170.     {
  171.         Empty();
  172.     }
  173.  
  174.    
  175.     T Pop()
  176.     {
  177.         if (pTop == nullptr)
  178.             return 0;
  179.  
  180.         Node<T>* p2;
  181.         T data;
  182.         data = pTop->data;
  183.  
  184.         p2 = pTop;
  185.         pTop = pTop->next;
  186.  
  187.         // Освободить память, выделенную под 1-й элемент
  188.         delete p2;
  189.         return data;
  190.     }
  191.  
  192.  
  193.     void operator!()
  194.     {
  195.         Node<T>* p=this->pTop;
  196.         if (pTop == nullptr) {
  197.             return;
  198.         }
  199.         T max=pTop->data;
  200.         while (pTop != nullptr)
  201.         {  
  202.             pTop = pTop->next;
  203.             if ((pTop!=nullptr)&&(pTop->data>max))
  204.             {
  205.                 max = pTop->data;
  206.             }
  207.         }
  208.         this->pTop=p;
  209.         cout << "Max element is: " << max << endl;
  210.     }
  211. };
  212.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement