allia

смена элементов местами

Nov 24th, 2020
704
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. };
  9.  
  10. class List
  11. {
  12.    ListElem *pbeg, *pend;
  13.    ListElem *find_elem(int keyval);
  14.    int Size = 0;
  15. public:
  16.    List() {  pend = pbeg = NULL; }
  17.    int get_Size() { return Size; }
  18.    void push_front(int val);
  19.    int pop_front();
  20.    bool change (int znach_1, int znach_2);
  21.    int top();
  22. };
  23.  
  24. ListElem* List::find_elem(int keyval)
  25. {
  26.    ListElem *pcur = pbeg;
  27.    for (; pcur; pcur = pcur->next)
  28.     if (pcur->value == keyval)
  29.       break;
  30.    return pcur;
  31. }
  32.  
  33. bool List::change(int znach_1, int znach_2)
  34. {
  35.   ListElem *ptr_1, *ptr_2;
  36.   ptr_1 = find_elem(znach_1);
  37.   ptr_2 = find_elem(znach_2);
  38.  
  39.   ptr_1->value = znach_2;
  40.   ptr_2->value = znach_1;
  41.   return true;
  42. }
  43.  
  44. void List::push_front(int val)
  45. {
  46.    ListElem *pnew = new ListElem;
  47.    pnew->value = val;
  48.    pnew->next = pbeg;
  49.    pbeg = pnew;
  50.    if (!pend)
  51.      pend = pnew;
  52.   Size++;
  53. }
  54.  
  55. int List::pop_front()
  56. {
  57.    if (!pbeg)
  58.     return -1;
  59.    ListElem *ptr = pbeg;
  60.    int val = pbeg->value;
  61.    pbeg = pbeg->next;
  62.    if (!pbeg) pend = NULL;
  63.    delete ptr;
  64.    return val;
  65. }
  66.  
  67. int main ()
  68. {
  69.   List lst;
  70.   int number, znach_1, znach_2;
  71.  
  72.   //for ( int i = 0; i< n; i++)
  73.   while (cin >> number)
  74.     lst.push_front(number);
  75.  
  76.   int dlina = lst.get_Size();
  77.  
  78.   znach_1 = lst.pop_front();
  79.   znach_2 = lst.pop_front();
  80.  
  81.   lst.change(znach_1, znach_2);
  82.  
  83.   dlina -= 2;
  84.  
  85.   int *arr = new int[dlina];
  86.  
  87.   for (int i = 0; i < dlina; i++)
  88.    arr[i] = lst.pop_front();
  89.  
  90.   for (int i = dlina - 1; i >= 0; i--)
  91.     cout << arr[i] << " ";
  92. }
RAW Paste Data