Advertisement
allia

ОЧЕРЕДЬ С ДВУМЯ КОНЦАМИ

Dec 3rd, 2020 (edited)
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.97 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  struct ListElem
  5. {
  6.    char value;
  7.    ListElem *next;
  8.    ListElem *prev;
  9. };
  10.  
  11. class List
  12. {
  13.    ListElem *pbeg, *pend;
  14.    int Size = 0;
  15. public:
  16.    List()
  17.     {
  18.      pend = pbeg = NULL;
  19.     }
  20.    int get_Size()
  21.    {
  22.      return Size;
  23.    }
  24.    void push_front(char val);
  25.    void push_back(char val);
  26.    bool ravenstvo(char a, char b, char c);
  27.    void back(char val);
  28.    void front(char val);
  29.    void pop_front();
  30.    void pop_back();
  31.    void print();
  32. };
  33.  
  34. void List::push_front(char val)
  35. {
  36.    ListElem *pnew = new ListElem;
  37.  
  38.    pnew->value = val;
  39.    pnew->next = NULL;
  40.    pnew->prev = NULL;
  41.    
  42.    if (pbeg == NULL)
  43.    {
  44.      pbeg = pnew;
  45.      pend = pnew;
  46.      Size++;
  47.    }
  48.    else
  49.    {
  50.      pnew -> next = pbeg;
  51.      pnew -> prev = NULL;
  52.      pbeg->prev = pnew;
  53.      pbeg = pnew;
  54.      Size++;
  55.    }
  56. }
  57.  
  58.  void List::push_back(char val)
  59. {
  60.    ListElem *pnew = new ListElem;
  61.  
  62.    pnew->value = val;
  63.    pnew->next = NULL;
  64.    pnew->prev = NULL;
  65.  
  66.    if (Size == 0)
  67.    {
  68.      pbeg = pnew;
  69.      pend = pnew;
  70.      Size++;
  71.    }
  72.     else
  73.    {
  74.      pnew->next = NULL;
  75.      pnew->prev = pend;
  76.      pend->next = pnew;
  77.      pend = pnew;
  78.      Size++;
  79.    }
  80.   }
  81.  
  82. void List::pop_front()
  83. {
  84.    if (Size > 1)
  85.         {
  86.             ListElem *temp = pbeg->next;
  87.             pbeg = pbeg->next;
  88.             pbeg->next = temp->next;
  89.             delete temp->prev;
  90.         }
  91.         else
  92.         {
  93.             pend = nullptr;
  94.             pbeg  = nullptr;
  95.         }
  96.         Size--;
  97. }
  98.  
  99. void List::pop_back()
  100. {
  101.   if (Size > 1)
  102.         {
  103.             ListElem *temp = pend->prev;
  104.             pend = pend->prev;
  105.             pend->prev = temp->prev;
  106.             delete temp->next;
  107.         }
  108.         else
  109.         {
  110.             pend = nullptr;
  111.             pbeg  = nullptr;
  112.         }
  113.         Size--;
  114. }
  115.  
  116. void List:: print()
  117.     {
  118.         ListElem *current = pbeg;
  119.         for (int i = 0; i < Size; i++)
  120.         {
  121.             cout << current->value << " ";
  122.             current = current->next;
  123.         }
  124.     }
  125.  
  126. bool List::ravenstvo(char a, char b, char c)
  127. {
  128.   if (a == b && b == c)
  129.    return true;
  130.   else return false;
  131. }
  132.  
  133. void List:: back(char val)
  134. {
  135.  if ( Size > 1 && ravenstvo(val, pend->value, pend->prev->value))
  136.  {
  137.    pop_back();
  138.    pop_back();
  139.  }
  140.  else
  141.    push_back(val);
  142. }
  143.  
  144. void List:: front(char val)
  145. {
  146.  if ( Size > 1 && ravenstvo(val, pbeg->value, pbeg->next->value))
  147.  {
  148.    pop_front();
  149.    pop_front();
  150.  }
  151.  else
  152.    push_front(val);
  153. }
  154.  
  155. int main ()
  156. {
  157.   List lst;
  158.   int m, parametr, dlina;
  159.   char shet;
  160.   cin >> m;
  161.  
  162.   for (int i = 0; i < m; i++)
  163.    {
  164.      cin >> parametr;
  165.      cin >> shet;
  166.  
  167.      if (parametr == 1)
  168.       lst.front(shet);
  169.      else lst.back(shet);
  170.    }
  171.  
  172.    dlina = lst.get_Size();
  173.    if (dlina > 0)
  174.      lst.print();
  175.    else cout << -1;
  176. }  
  177. // в решении очень помог Максим Ткачев, у меня все время не находился предыдущий концу элемент, с указателями были проблемы, Максим дал много советов и я переписала код оптимально
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement