Advertisement
endreweast

Lab2 OOP

Nov 19th, 2015
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. //6. Організувати два списки, заповнити їх впорядкованими за зростанням числами і зробити функцію злиття цих списків.
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class List
  7. {
  8. private:
  9.     int size;
  10.     struct Item
  11.     {
  12.         int value;
  13.         Item *next, *prev;
  14.     } *first, *last;
  15. public:
  16.     List()
  17.     {
  18.         size = 0;
  19.         first = 0;
  20.         last = 0;
  21.     }
  22.  
  23.     void add(int value)
  24.     {
  25.         if (size < 1)
  26.         {
  27.             size = 1;
  28.             first = new Item;
  29.             first->value = value;
  30.             first->prev = 0;
  31.             first->next = 0;
  32.             last = first;
  33.         }
  34.         else
  35.         {
  36.             Item *newItem = new Item;
  37.             newItem->value = value;
  38.             newItem->prev = last;
  39.             newItem->next = 0;
  40.             last->next = newItem;
  41.             last = newItem;
  42.             size++;
  43.         }
  44.     }
  45.  
  46.     int *getArray()
  47.     {
  48.         Item *current = first;
  49.         int *result = new int[size];
  50.         for (int i = 0; i < size; i++)
  51.         {
  52.             result[i] = current->value;
  53.             current = current->next;
  54.         }
  55.         return result;
  56.     }
  57. };
  58.  
  59. void merge(int arr1[], int size1, int arr2[], int size2, int result[])
  60. {
  61.     int i = 0, j = 0, k = 0;
  62.     while (i < size2 && j < size1)
  63.     {
  64.         if (arr1[i] <= arr2[j])
  65.         {
  66.             result[k] = arr1[i];
  67.             i++;
  68.         }
  69.         else
  70.         {
  71.             result[k] = arr2[j];
  72.             j++;
  73.         }
  74.         k++;
  75.     }
  76.     if (i < size2)
  77.     {
  78.         for (int p = i; p < size2; p++)
  79.         {
  80.             result[k] = arr1[p];
  81.             k++;
  82.         }
  83.     }
  84.     else
  85.     {
  86.         for (int p = j; p < size1; p++)
  87.         {
  88.             result[k] = arr2[p];
  89.             k++;
  90.         }
  91.     }
  92. }
  93.  
  94.  
  95. int main()
  96. {
  97.     int arr1size;
  98.     cout << "Enter array 1 size: ";
  99.     cin >> arr1size;
  100.     List arr1;
  101.     for (int i = 0; i < arr1size; i++)
  102.     {
  103.         int value;
  104.         cout << "arr1[" << i << "]: ";
  105.         cin >> value;
  106.         arr1.add(value);
  107.     }
  108.  
  109.     int arr2size;
  110.     cout << "Enter array 2 size: ";
  111.     cin >> arr2size;
  112.     List arr2;
  113.     for (int i = 0; i < arr2size; i++)
  114.     {
  115.         int value;
  116.         cout << "arr2[" << i << "]: ";
  117.         cin >> value;
  118.         arr2.add(value);
  119.     }
  120.  
  121.     int *result = new int[arr1size + arr2size];
  122.  
  123.     merge(arr1.getArray(), arr1size, arr2.getArray(), arr2size, result);
  124.  
  125.     cout << "result = { ";
  126.  
  127.     for (int i = 0; i < arr1size + arr2size; i++)
  128.     {
  129.         cout << result[i] << " ";
  130.     }
  131.     cout << "}" << endl;
  132.     return 0;
  133. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement