allia

двусвязный список

Nov 29th, 2020
432
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  struct ListElem
  5. {
  6.    int 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(int val);
  25.    int pop_front();
  26. };
  27.  
  28. void List::push_front(int val)
  29. {
  30.    ListElem *pnew = new ListElem;
  31.    ListElem *current = pnew;
  32.    pnew->value = val;
  33.    pnew->next = NULL;
  34.    pnew->prev = NULL;
  35.    if (pbeg == NULL)
  36.    {
  37.      pbeg = pnew;
  38.      pend = pnew;
  39.    }
  40.    else
  41.    {
  42.      pnew -> next = pbeg;
  43.      current = current->next;
  44.      current->prev = pnew;
  45.      pbeg = pnew;
  46.    }
  47.   Size++;
  48. }
  49.  
  50. int List::pop_front()
  51. {
  52.    if (!pbeg)
  53.     return -1;
  54.    ListElem *ptr = pbeg;
  55.    int val = pbeg->value;
  56.    pbeg = pbeg->next;
  57.    if (!pbeg)
  58.     pend = NULL;
  59.    delete ptr;
  60.    return val;
  61. }
  62.  
  63. int main ()
  64. {
  65.   List lst;
  66.   int number;
  67.  
  68.   while(cin >> number)
  69.     lst.push_front(number);
  70.  
  71.   int dlina = lst.get_Size();
  72.  
  73.   int *arr = new int[dlina];
  74.  
  75.   for (int i = 0; i < dlina; i++)
  76.    arr[i] = lst.pop_front();
  77.  
  78.    for (int i = dlina - 1; i >= 0; i--)
  79.     cout << arr[i] << " ";
  80. }
RAW Paste Data