Advertisement
Guest User

Untitled

a guest
May 24th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <time.h>
  4.  
  5. using namespace std;
  6.  
  7. struct Element
  8. {
  9.     int value;
  10.     Element *next = 0;
  11. };
  12.  
  13. struct List
  14. {
  15.     Element *head = 0;
  16.     Element *tail = 0;
  17.     int elementAmount;
  18. };
  19.  
  20. bool isEmpty(List *list)
  21. {
  22.     return list->head == 0;
  23. }
  24.  
  25. int randomValue()
  26. {
  27.     srand(time(NULL));
  28.     return rand()%10+1;
  29. }
  30.  
  31. void addFirstElement(List **list, Element *element)
  32. {
  33.     (*list)->head = element;
  34.     (*list)->tail = element;
  35.     (*list)->elementAmount++;
  36. }
  37.  
  38. void addElementTop(List **list)
  39. {
  40.     Element *element = new Element();
  41.     element->value = randomValue();
  42.     if(isEmpty(*list)) {
  43.         addFirstElement(list, element);
  44.     }
  45.     else {
  46.         element->next = (*list)->head;
  47.         (*list)->head = element;
  48.         (*list)->elementAmount++;
  49.     }
  50. }
  51.  
  52. void addElementEnd(List **list)
  53. {
  54.     Element *element = new Element();
  55.     element->value = randomValue();
  56.  
  57.     if(isEmpty(*list)) {
  58.         addFirstElement(list, element);
  59.     }
  60.     else {
  61.         (*list)->tail->next = element;
  62.         (*list)->tail = element;
  63.         (*list)->elementAmount++;
  64.     }
  65. }
  66.  
  67. void addElement(List **list)
  68. {
  69.     Element *element = new Element();
  70.     element->value = randomValue();
  71.     int index;
  72.  
  73.     cout << "Please specific index to add element before : " ;
  74.     cin >> index;
  75.  
  76.     if(isEmpty(*list)) {
  77.         addElementTop(list);
  78.     }
  79.     else if(index > ((*list)->elementAmount)) {
  80.         addElementEnd(list);
  81.     }
  82.     else {
  83.         Element *tmpl = new Element();
  84.         tmpl = (*list)->head;
  85.  
  86.         for(int i = 1; i < index - 1; i ++) {
  87.             tmpl = tmpl->next;
  88.         }
  89.  
  90.         element->next = tmpl->next;
  91.         tmpl->next = element;
  92.         (*list)->elementAmount++;
  93.  
  94.         delete tmpl;
  95.     }
  96.  
  97. }
  98.  
  99. void showFirst(List **list)
  100. {
  101.     if(isEmpty(*list)) {
  102.         cout << "Sorry, list is empty." << endl;
  103.     }
  104.     else {
  105.         cout << "Top value of list is : " << (*list)->head->value << endl;
  106.     }
  107. }
  108.  
  109. void showLast(List **list)
  110. {
  111.     if(isEmpty(*list)) {
  112.         cout << "Sorry, list is empty." << endl;
  113.     }
  114.     else {
  115.         cout << "Last value of list is : " << (*list)->tail->value << endl;
  116.     }
  117. }
  118.  
  119. void showList(List **list)
  120. {
  121.     if(isEmpty(*list)) {
  122.         cout << "Sorry, list is empty." << endl;
  123.     }
  124.     else {
  125.         Element *temporaryElement = (*list)->head;
  126.  
  127.         while (temporaryElement != 0) {
  128.             cout << temporaryElement->value << endl;
  129.             temporaryElement = temporaryElement->next;
  130.         }
  131.         delete temporaryElement;
  132.     }
  133. }
  134.  
  135. void avarage(List **list)
  136. {
  137.     if(isEmpty(*list)) {
  138.         cout << "Sorry, list is empty." << endl;
  139.     }
  140.     else {
  141.         Element *temporaryElement = (*list)->head;
  142.         int sum = 0;
  143.  
  144.         for(int i = 0; i < (*list)->elementAmount; i++) {
  145.             sum = sum + temporaryElement->value;
  146.             temporaryElement = temporaryElement->next;
  147.         }
  148.  
  149.         delete temporaryElement;
  150.  
  151.         double average = (double)sum/(double)(*list)->elementAmount;
  152.  
  153.         cout << "Average of list elements is " << average;
  154.     }
  155. }
  156.  
  157. void removeElementTop(List **list)
  158. {
  159.     if(isEmpty(*list)) {
  160.         cout << "Sorry, list is empty." << endl;
  161.     }
  162.     else if((*list)->elementAmount > 1) {
  163.         Element *temporaryElement = (*list)->head;
  164.         (*list)->head = (*list)->head->next;
  165.         (*list)->elementAmount--;
  166.         delete temporaryElement;
  167.     }
  168.     else {
  169.         Element *temporaryElement = (*list)->head;
  170.         (*list)->head = 0;
  171.         (*list)->tail = 0;
  172.         (*list)->elementAmount = 0;
  173.         delete temporaryElement;
  174.     }
  175. }
  176.  
  177. void removeElementEnd(List **list)
  178. {
  179.     if(isEmpty(*list)) {
  180.         cout << "Sorry, list is empty." << endl;
  181.     }
  182.     else if((*list)->elementAmount > 1) {
  183.         Element *temporaryElement = (*list)->head;
  184.  
  185.         while(temporaryElement->next != 0) {
  186.             if(temporaryElement->next->next == 0) {
  187.                 temporaryElement->value = 0;
  188.                 (*list)->elementAmount--;
  189.             }
  190.             else {
  191.                 temporaryElement = temporaryElement->next;
  192.             }
  193.         }
  194.     }
  195.     else {
  196.         Element *temporaryElement = (*list)->head;
  197.         (*list)->head = 0;
  198.         (*list)->tail = 0;
  199.         (*list)->elementAmount = 0;
  200.         delete temporaryElement;
  201.     }
  202. }
  203.  
  204. void removeElement(List **list)
  205. {
  206.     if(isEmpty(*list)) {
  207.         cout << "Sorry, list is empty." << endl;
  208.     }
  209.     else {
  210.         int index;
  211.  
  212.         cout << "Please specific index to add element before : " ;
  213.         cin >> index;
  214.  
  215.         if(index <= 1) {
  216.             removeElementTop(list);
  217.         }
  218.         else if(index >= (*list)->elementAmount) {
  219.             removeElementEnd(list);
  220.         }
  221.         else {
  222.             Element *tmpl = (*list)->head;
  223.  
  224.             for(int i = 1; i < index - 1; i ++) {
  225.                 tmpl = tmpl->next;
  226.             }
  227.  
  228.             Element *element = tmpl->next;
  229.             tmpl->next = element->next;
  230.             (*list)->elementAmount--;
  231.             delete element;
  232.             delete tmpl;
  233.         }
  234.     }
  235. }
  236.  
  237. void removeList(List **list)
  238. {
  239.     while(!isEmpty(*list)) {
  240.         removeElementTop(list);
  241.     }
  242. }
  243.  
  244. void printMenu()
  245. {
  246.     cout << "*** MENU ***" << endl;
  247.     cout << "1. Check if list is empty" << endl;
  248.     cout << "2. Add element to end of list" << endl;
  249.     cout << "3. Add element to beginning of list" << endl;
  250.     cout << "4. Add element before specific index" << endl;
  251.     cout << "5. Remove element from end of list" << endl;
  252.     cout << "6. Remove element from beginning of list" << endl;
  253.     cout << "7. Remove element from specific index" << endl;
  254.     cout << "8. Get top element from list" << endl;
  255.     cout << "9. Get lase element from list" << endl;
  256.     cout << "10. Count arithmetic average" << endl;
  257.     cout << "11. Show list" << endl;
  258.     cout << "12. Remove list" << endl;
  259.     cout << "13. Exit" << endl;
  260. }
  261.  
  262. int main()
  263. {
  264.     List *list = new List;
  265.     int choice;
  266.     while(true)
  267.     {
  268.         printMenu();
  269.  
  270.         cout<<"Your choice : ";
  271.         cin>>choice;
  272.  
  273.         switch(choice)
  274.         {
  275.             case 1:
  276.                 if(isEmpty(list)) {
  277.                     cout << "List is empty." << endl;
  278.                 }
  279.                 break;
  280.  
  281.             case 2:
  282.                 addElementEnd(&list);
  283.                 break;
  284.  
  285.             case 3:
  286.                 addElementTop(&list);
  287.                 break;
  288.  
  289.             case 4:
  290.                 addElement(&list);
  291.                 break;
  292.  
  293.             case 5:
  294.                 removeElementTop(&list);
  295.                 break;
  296.  
  297.             case 6:
  298.                 removeElementEnd(&list);
  299.                 break;
  300.  
  301.             case 7:
  302.                 removeElement(&list);
  303.                 break;
  304.  
  305.             case 8:
  306.                 showFirst(&list);
  307.                 break;
  308.  
  309.             case 9:
  310.                 showLast(&list);
  311.                 break;
  312.  
  313.             case 10:
  314.                 avarage(&list);
  315.                 break;
  316.  
  317.             case 11:
  318.                 showList(&list);
  319.                 break;
  320.  
  321.             case 12:
  322.                 removeList(&list);
  323.                 break;
  324.  
  325.             case 13:
  326.                 removeList(&list);
  327.                 delete list;
  328.                 return 0;
  329.                 break;
  330.  
  331.             default:
  332.                 cout << "Error something wrong" << endl;
  333.         }
  334.     }
  335.     return 0;
  336. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement