Advertisement
rado_dimitrov66

Deque of Number

Apr 24th, 2024
516
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.84 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. // First task
  6.  
  7. struct DequeOfNumbers
  8. {
  9.     int valueKey;
  10.     DequeOfNumbers* nextElement;
  11. } *leftInput = NULL, * rightInput = NULL;
  12.  
  13.  
  14.  
  15. void popElement(short choose, short deleteOption, short countOfDelete)
  16. {
  17.  
  18.     DequeOfNumbers* p;
  19.     DequeOfNumbers* p2;
  20.  
  21.  
  22.     switch (choose)
  23.     {
  24.     case 1:
  25.  
  26.         switch (deleteOption)
  27.         {
  28.         case 1:
  29.  
  30.             for (int i = 0; i < countOfDelete; i++)
  31.             {
  32.                 p = leftInput;
  33.  
  34.                 leftInput = leftInput->nextElement;
  35.  
  36.                 delete p;
  37.  
  38.                 if (!leftInput)
  39.                 {
  40.                     rightInput = NULL;
  41.  
  42.                     break;
  43.  
  44.  
  45.                 }
  46.             }
  47.  
  48.  
  49.             break;
  50.  
  51.         case 2:
  52.  
  53.             while (leftInput)
  54.             {
  55.                 p = leftInput;
  56.  
  57.                 leftInput = leftInput->nextElement;
  58.  
  59.                 delete p;
  60.  
  61.             }
  62.  
  63.             rightInput = NULL;
  64.  
  65.  
  66.             break;
  67.         default:
  68.             break;
  69.         }
  70.  
  71.  
  72.  
  73.         break;
  74.  
  75.     case 2:
  76.  
  77.         switch (deleteOption)
  78.         {
  79.         case 1:
  80.  
  81.             for (int i = 0; i < countOfDelete; i++)
  82.             {
  83.                 p = rightInput;
  84.                 p2 = leftInput;
  85.  
  86.                 bool isLast = false;
  87.  
  88.                 do
  89.                 {
  90.                     if (!p2->nextElement) {
  91.  
  92.                         isLast = true;
  93.                         break;
  94.  
  95.                     }
  96.  
  97.                     if (p2->nextElement != p) {
  98.                         p2 = p2->nextElement;
  99.                     }
  100.  
  101.                 } while (p2->nextElement != p);
  102.  
  103.  
  104.                 if (isLast)
  105.                 {
  106.                     rightInput = NULL;
  107.  
  108.                     leftInput = NULL;
  109.  
  110.                     delete p;
  111.  
  112.  
  113.                     break;
  114.  
  115.                 }
  116.                 else {
  117.                     rightInput = p2;
  118.  
  119.                     delete p;
  120.  
  121.                     p2 = rightInput;
  122.  
  123.                     rightInput->nextElement = NULL;
  124.                 }
  125.             }
  126.  
  127.             break;
  128.  
  129.         case 2:
  130.  
  131.             while (rightInput)
  132.             {
  133.  
  134.                 p = rightInput;
  135.                 p2 = leftInput;
  136.  
  137.                 bool isLast = false;
  138.  
  139.                 do
  140.                 {
  141.                     if (!p2->nextElement) {
  142.  
  143.                         isLast = true;
  144.                         break;
  145.  
  146.                     }
  147.  
  148.                     if (p2->nextElement != p) {
  149.                         p2 = p2->nextElement;
  150.                     }
  151.  
  152.                 } while (p2->nextElement != p);
  153.  
  154.  
  155.                 if (isLast)
  156.                 {
  157.                     rightInput = NULL;
  158.  
  159.                     leftInput = NULL;
  160.  
  161.                     delete p;
  162.  
  163.  
  164.                 }
  165.                 else {
  166.                     rightInput = p2;
  167.  
  168.                     delete p;
  169.  
  170.                     p2 = rightInput;
  171.  
  172.                     rightInput->nextElement = NULL;
  173.                 }
  174.  
  175.             }
  176.  
  177.  
  178.             break;
  179.         default:
  180.             break;
  181.         }
  182.  
  183.         break;
  184.     default:
  185.         break;
  186.     }
  187.  
  188. }
  189.  
  190.  
  191.  
  192. void pushNewElement(int n, short choose)
  193. {
  194.  
  195.     DequeOfNumbers* p;
  196.  
  197.     switch (choose)
  198.     {
  199.     case 1:
  200.  
  201.         p = leftInput;
  202.  
  203.         leftInput = new DequeOfNumbers;
  204.  
  205.         leftInput->valueKey = n;
  206.  
  207.         leftInput->nextElement = p;
  208.  
  209.         if (!rightInput) {
  210.             rightInput = leftInput;
  211.         }
  212.  
  213.         break;
  214.  
  215.     case 2:
  216.         p = rightInput;
  217.  
  218.         rightInput = new DequeOfNumbers;
  219.  
  220.         rightInput->valueKey = n;
  221.  
  222.         rightInput->nextElement = NULL;
  223.  
  224.         if (!leftInput) {
  225.             leftInput = rightInput;
  226.         }
  227.         else {
  228.             p->nextElement = rightInput;
  229.         }
  230.  
  231.     default:
  232.         break;
  233.     }
  234. }
  235.  
  236.  
  237.  
  238. int getHighestNumber() {
  239.  
  240.     short choose = -1;
  241.     DequeOfNumbers* p;
  242.  
  243.  
  244.     int highestNumber = 0;
  245.  
  246.     p = leftInput;
  247.  
  248.     highestNumber = leftInput->valueKey;
  249.  
  250.  
  251.  
  252.     while (p)
  253.     {
  254.  
  255.         if (p->valueKey > highestNumber)
  256.         {
  257.             highestNumber = p->valueKey;
  258.         }
  259.  
  260.         p = p->nextElement;
  261.  
  262.     };
  263.  
  264.  
  265.     return highestNumber;
  266.  
  267. }
  268.  
  269.  
  270. void getAllNumbers() {
  271.  
  272.  
  273.     DequeOfNumbers* p;
  274.  
  275.     p = leftInput;
  276.  
  277.  
  278.     do {
  279.         cout << p->valueKey << " ";
  280.  
  281.         p = p->nextElement;
  282.  
  283.     } while (p);
  284.  
  285.     cout << endl;
  286.  
  287. }
  288.  
  289. int main()
  290. {
  291.     short choose = -1;
  292.  
  293.     short choose2 = -1;
  294.     short deleteOption = -1;
  295.     short countOfDelete = -1;
  296.     do
  297.     {
  298.  
  299.         cout << "Choose option\n[1] Add integer number\n[2] Remove element\n[3] Get highest number\n[4] Get all numbers\n[0] Exit\n";
  300.         cin >> choose;
  301.  
  302.         switch (choose)
  303.         {
  304.         case 1:
  305.  
  306.             system("cls");
  307.  
  308.  
  309.             short counterOfAdd;
  310.             int n;
  311.  
  312.             do
  313.             {
  314.                 cout << "Choose option\n[1] Add in LEFT\n[2] Add in RIGHT\n[0] Exit\n";
  315.                 cin >> choose2;
  316.  
  317.                 if (choose2 > 0)
  318.                 {
  319.  
  320.                     do
  321.                     {
  322.                         cout << "Enter count of number for add: ";
  323.                         cin >> counterOfAdd;
  324.  
  325.  
  326.                     } while (counterOfAdd < 0);
  327.  
  328.                     cout << endl;
  329.  
  330.                     for (int i = 0; i < counterOfAdd; i++) {
  331.  
  332.                         cout << "Enter value of int: ";
  333.                         cin >> n;
  334.  
  335.                         pushNewElement(n, choose2);
  336.                     }
  337.                 }
  338.  
  339.  
  340.             } while (choose2 < 0 || choose2 > 2);
  341.  
  342.             if (choose2 > 0)
  343.             {
  344.                 cout << endl;
  345.                 cout << "Number/s added\n";
  346.             }
  347.             else {
  348.                 cout << endl;
  349.                 cout << "Number/s no added\n";
  350.             }
  351.  
  352.             choose = -1;
  353.  
  354.             choose2 = -1;
  355.  
  356.             break;
  357.  
  358.         case 2:
  359.  
  360.             system("cls");
  361.  
  362.  
  363.             if (leftInput && rightInput)
  364.             {
  365.                 do
  366.                 {
  367.                     cout << "Choose option\n[1] Remove LEFT\n[2] Remove RIGHT\n[0] Exit\n";
  368.                     cin >> choose2;
  369.  
  370.  
  371.                     if (choose2 > 0)
  372.                     {
  373.                         do {
  374.                             cout << "Choose option\n[1] Count of number for delete \n[2] Remove All\n[0] Exit\n";
  375.                             cin >> deleteOption;
  376.  
  377.  
  378.                             if (deleteOption == 1)
  379.                             {
  380.                                 do
  381.                                 {
  382.                                     cout << "Enter count of number for delete: ";
  383.                                     cin >> countOfDelete;
  384.  
  385.                                 } while (countOfDelete < 1);
  386.  
  387.                             }
  388.  
  389.                         } while (deleteOption < 0 || deleteOption > 2);
  390.  
  391.                         popElement(choose2, deleteOption, countOfDelete);
  392.  
  393.                         cout << "Delete element" << endl;
  394.                     }
  395.  
  396.  
  397.                 } while (choose2 < 0 || choose2 > 2);
  398.             }
  399.             else {
  400.                 cout << "No number/s to remove\n";
  401.                 cout << endl;
  402.             }
  403.  
  404.             choose = -1;
  405.             choose2 = -1;
  406.  
  407.             countOfDelete = -1;
  408.             deleteOption = -1;
  409.  
  410.             break;
  411.  
  412.         case 3:
  413.  
  414.  
  415.             system("cls");
  416.  
  417.             if (leftInput && rightInput)
  418.             {
  419.                 if (leftInput->nextElement) {
  420.  
  421.                     cout << "Highest number is: " << getHighestNumber() << endl;
  422.                     cout << endl;
  423.                 }
  424.                 else {
  425.                     cout << "Have only one number" << endl;
  426.                     cout << endl;
  427.                 }
  428.  
  429.  
  430.             }
  431.             else {
  432.                 cout << "No number/s to get\n";
  433.                 cout << endl;
  434.             }
  435.  
  436.             choose = -1;
  437.  
  438.             break;
  439.  
  440.         case 4:
  441.  
  442.             system("cls");
  443.  
  444.             if (leftInput && rightInput)
  445.             {
  446.                 getAllNumbers();
  447.                 cout << endl;
  448.             }
  449.             else {
  450.                 cout << "No number/s to get\n";
  451.                 cout << endl;
  452.             }
  453.  
  454.  
  455.             choose = -1;
  456.  
  457.             break;
  458.  
  459.         default:
  460.             break;
  461.         }
  462.  
  463.     } while (choose < 0 || choose > 4);
  464. }
  465.  
  466.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement