Advertisement
rado_dimitrov66

Stack of number

Apr 11th, 2024
824
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.21 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct Sstack
  5. {
  6.     int key;
  7.     Sstack* next;
  8. }*start = NULL;
  9.  
  10. struct Pstack
  11. {
  12.     int key;
  13.     Pstack* next;
  14. }*start2 = NULL;
  15.  
  16. void addElement(unsigned int& countOfNumber)
  17. {
  18.     Sstack* s;
  19.     s = start;
  20.     int Snum;
  21.     do
  22.     {
  23.         cout << "Enter Positive Number: ";
  24.         cin >> Snum;
  25.  
  26.     } while (Snum < 0);
  27.  
  28.  
  29.     start = new Sstack;
  30.  
  31.     start->key = Snum;
  32.     start->next = s;
  33.  
  34.     countOfNumber++;
  35.  
  36.  
  37.     cout << "Element added" << endl;
  38.  
  39.     cout << endl;
  40. }
  41.  
  42. void removeElement(bool isP)
  43. {
  44.  
  45.     if (isP) {
  46.  
  47.  
  48.         while (start2)
  49.         {
  50.  
  51.             Pstack* s = start2;
  52.  
  53.             bool isLast = false;
  54.  
  55.             do
  56.             {
  57.                 if (!s->next) {
  58.  
  59.                     isLast = true;
  60.                     break;
  61.  
  62.                 }
  63.  
  64.                 if (s->next != start2) {
  65.                     s = s->next;
  66.                 }
  67.  
  68.             } while (s->next != start2);
  69.  
  70.             if (isLast)
  71.             {
  72.                 start2 = NULL;
  73.  
  74.                 delete s;
  75.  
  76.             }
  77.             else {
  78.                 start2 = s;
  79.  
  80.                 delete s;
  81.             }
  82.         }
  83.  
  84.  
  85.     }
  86.     else {
  87.  
  88.  
  89.         while (start)
  90.         {
  91.  
  92.             Sstack* s = start;
  93.  
  94.             bool isLast = false;
  95.  
  96.             do
  97.             {
  98.                 if (!s->next) {
  99.  
  100.                     isLast = true;
  101.                     break;
  102.  
  103.                 }
  104.  
  105.                 if (s->next != start) {
  106.                     s = s->next;
  107.                 }
  108.  
  109.             } while (s->next != start);
  110.  
  111.  
  112.             if (isLast)
  113.             {
  114.                 start = NULL;
  115.  
  116.                 delete s;
  117.  
  118.             }
  119.             else {
  120.                 start = s;
  121.  
  122.                 delete s;
  123.  
  124.  
  125.                 start->next = NULL;
  126.             }
  127.  
  128.         }
  129.  
  130.  
  131.         cout << "Element/s removed\n";
  132.  
  133.     }
  134.  
  135. }
  136.  
  137. void printElements()
  138. {
  139.     Sstack* s = start;
  140.  
  141.     while (s)
  142.     {
  143.         cout << s->key << " ";
  144.  
  145.         s = s->next;
  146.     }
  147.  
  148.     cout << endl;
  149. }
  150.  
  151. void sortElementInPStack(unsigned int countOfNumber)
  152. {
  153.  
  154.     int* numberInStack = new int(countOfNumber);
  155.  
  156.     Sstack* s = start;
  157.  
  158.     unsigned int current;
  159.  
  160.     int count = -1;
  161.  
  162.     /*for (int i = 1; i < countOfNumber; i++)
  163.     {
  164.  
  165.         unsigned int step = 0;
  166.  
  167.         for (int j = 0; j < i; j++) {
  168.  
  169.             if (numberInStack[j] < s->key)
  170.             {
  171.                 step++;
  172.  
  173.             }
  174.             else {
  175.                 break; 
  176.             }
  177.            
  178.         }
  179.  
  180.         if (step > 0) {
  181.  
  182.             if (step == i - 1) {
  183.  
  184.                 numberInStack[i] = s->key;
  185.             }
  186.             else {
  187.  
  188.                 for (int j = i; j > step; j--) {
  189.  
  190.                     numberInStack[j] = numberInStack[j - 1];
  191.  
  192.                 }
  193.  
  194.                 numberInStack[step] = s->key;
  195.             }
  196.  
  197.         }
  198.         else {
  199.  
  200.             for (int j = 1; j <= i; j++) {
  201.  
  202.                 numberInStack[j] = numberInStack[j - 1];
  203.  
  204.                 cout << numberInStack[j] << " ";
  205.  
  206.             }
  207.  
  208.             numberInStack[0] = s->key;
  209.  
  210.  
  211.         }
  212.  
  213.         s = s->next;
  214.     }*/
  215.  
  216.  
  217.     for (int i = 0; i < countOfNumber; i++)
  218.     {
  219.         numberInStack[i] = s->key;
  220.  
  221.         s = s->next;
  222.     }
  223.  
  224.     for (int i = 0; i < countOfNumber; i++)
  225.     {
  226.  
  227.         for (int j = 0; j < countOfNumber; j++)
  228.         {
  229.             if (j > i && i != 0 || i != j && i == 0)
  230.             {
  231.  
  232.  
  233.                 if (numberInStack[i] > numberInStack[j])
  234.                 {
  235.                     count = j;
  236.                 }
  237.  
  238.                
  239.             }
  240.         }
  241.  
  242.         if (count > -1) {
  243.  
  244.             current = numberInStack[count];
  245.  
  246.             numberInStack[count] = numberInStack[i];
  247.  
  248.             numberInStack[i] = current;
  249.  
  250.             count = -1;
  251.  
  252.             i--;
  253.         }
  254.     }
  255.  
  256.  
  257.  
  258.     removeElement(true);
  259.  
  260.     Pstack* p = start2;
  261.  
  262.     for (int i = 0; i < countOfNumber; i++)
  263.     {
  264.  
  265.         start2 = new Pstack;
  266.  
  267.         start2->key = numberInStack[i];
  268.  
  269.         start2->next = p;
  270.  
  271.         p = start2;
  272.  
  273.  
  274.     }
  275.  
  276.  
  277.  
  278.     while (p)
  279.     {
  280.         cout << p->key << " ";
  281.  
  282.         p = p->next;
  283.     }
  284.  
  285.  
  286.  
  287.     numberInStack = NULL;
  288.  
  289.     delete[] numberInStack;
  290.  
  291.     cout << endl;
  292. }
  293.  
  294. int main()
  295. {
  296.     short choice;
  297.  
  298.     unsigned int countOfNumber = 0;
  299.  
  300.     do
  301.     {
  302.         cout << "[1] Add element\n[2] Remove element \n[3] Print elements\n[4] Sort by descending order\n[0] Exit\n";
  303.         cin >> choice;
  304.  
  305.         switch (choice)
  306.         {
  307.         case 1:
  308.             system("cls");
  309.  
  310.             addElement(countOfNumber);
  311.  
  312.             choice = -1;
  313.  
  314.             break;
  315.         case 2:
  316.  
  317.             system("cls");
  318.  
  319.             if (!start) {
  320.                 cout << "No elements to remove\n";
  321.             }
  322.             else {
  323.                 removeElement(false);
  324.             }
  325.  
  326.  
  327.             choice = -1;
  328.  
  329.             break;
  330.  
  331.         case 3:
  332.  
  333.             system("cls");
  334.  
  335.             if (!start) {
  336.                 cout << "No elements to print\n";
  337.             }
  338.             else {
  339.                 printElements();
  340.             }
  341.  
  342.             choice = -1;
  343.  
  344.             break;
  345.  
  346.         case 4:
  347.  
  348.             system("cls");
  349.  
  350.  
  351.             if (!start) {
  352.                 cout << "No elements to sort\n";
  353.             }
  354.             else {
  355.  
  356.                 if (countOfNumber > 1) {
  357.                     sortElementInPStack(countOfNumber);
  358.  
  359.                 }
  360.                 else {
  361.                     cout << "Only one element\n";
  362.                 }
  363.  
  364.             }
  365.  
  366.             choice = -1;
  367.  
  368.             break;
  369.         default:
  370.             break;
  371.         }
  372.  
  373.     } while (choice < 0 || choice > 4);
  374.  
  375.  
  376. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement