Advertisement
informaticage

Liste dinamiche concatenate

Apr 3rd, 2016
617
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.33 KB | None | 0 0
  1. /**
  2.     Developed By InformaticageNJP
  3.     https://www.youtube.com/c/InformaticageNJP
  4. **/
  5.  
  6. #include <iostream>
  7. #include <cstdlib>
  8.  
  9. using namespace std;
  10.  
  11. struct person
  12. {
  13.     string name;
  14.     int age;
  15.     person *next;
  16. };
  17.  
  18. void sort_list(person **person_list);
  19. person *add_person(person *person_list);
  20. void show_persons(person *person_list);
  21.  
  22. int main()
  23. {
  24.     person *head = NULL;
  25.     char choice;
  26.  
  27.     do
  28.     {
  29.         system("cls");
  30.  
  31.         cout << "A) Aggiungi persona " << endl;
  32.         cout << "S) Stampa lista " << endl;
  33.         cout << "O) Ordina lista " << endl;
  34.         cout << "C) Chiudi applicazione " << endl;
  35.         cin >> choice;
  36.         choice = toupper(choice);
  37.         switch(choice)
  38.         {
  39.             case 'A':
  40.                 head = add_person(head);
  41.                 break;
  42.             case 'S':
  43.                 show_persons(head);
  44.                 break;
  45.             case 'O':
  46.                 sort_list(&head);
  47.                 break;
  48.             case 'C':
  49.                 break;
  50.             default:
  51.                 cout << "Scelta non contemplata." << endl;
  52.         }
  53.         system("Pause");
  54.     }while(choice != 'C');
  55.     return EXIT_SUCCESS;
  56. }
  57.  
  58. person *add_person(person *person_list)
  59. // Aggiunge una persona alla lista concatenata
  60. {
  61.     person *next_person = NULL;
  62.     person *prev_person = NULL;
  63.  
  64.     if(person_list == NULL)
  65.     // Se la lista è vuota
  66.     {
  67.         if((person_list = new person) != NULL)
  68.         // se creiamo una nuova persona con successo
  69.         {
  70.             next_person = person_list;
  71.             cout << "Nome persona: ";
  72.             cin >> next_person->name;
  73.             cout << "Eta' persona: ";
  74.             cin >> next_person->age;
  75.  
  76.             next_person->next = NULL;
  77.         }
  78.         else
  79.         // Se non viene alloccata la memoria con successo
  80.         {
  81.             cout << "Errore: Impossibile occupare la memoria." << endl;
  82.             return NULL;
  83.         }
  84.         return next_person;
  85.     }
  86.     else
  87.     // Se la lista non è vuota
  88.     {
  89.         next_person = person_list;
  90.         while(next_person->next != NULL)
  91.         // Fino a che non arriviamo alla fine della lista
  92.         {
  93.             next_person = next_person->next;
  94.         }
  95.         prev_person = next_person;
  96.  
  97.         if((next_person = new person) != NULL)
  98.         // se creiamo una nuova persona con successo
  99.         {
  100.             prev_person->next = next_person;
  101.  
  102.             cout << "Nome persona: ";
  103.             cin >> next_person->name;
  104.             cout << "Eta' persona: ";
  105.             cin >> next_person->age;
  106.  
  107.             next_person->next = NULL;
  108.         }
  109.         else
  110.         // Se non viene alloccata la memoria con successo
  111.         {
  112.             cout << "Errore: Impossibile occupare la memoria." << endl;
  113.         }
  114.         return person_list;
  115.     }
  116. }
  117.  
  118.  
  119. void show_persons(person *person_list)
  120. // Stampa tutti gli elementi nella lista
  121. {
  122.     person *next_person;
  123.     next_person = person_list;
  124.  
  125.     if(next_person == NULL)
  126.     // Se la lista è vuota
  127.     {
  128.         cout << "La lista e' vuota." << endl;
  129.         return;
  130.     }
  131.     else
  132.     // Se ci sono elementi nella lista
  133.     {
  134.         cout << "-------------------------" << endl;
  135.         while(next_person != NULL)
  136.         {
  137.             cout
  138.                 << next_person->name << endl
  139.                 << next_person->age << endl
  140.                 << "-------------------------" << endl;
  141.             next_person = next_person->next;
  142.         }
  143.     }
  144. }
  145.  
  146. void sort_list(person **person_list)
  147. {
  148.     person *current_person = *person_list;
  149.     person *next;
  150.  
  151.     while (current_person->next != NULL)
  152.     // Fino a che la lista ha un elemento successivo
  153.     {
  154.         person *next = current_person->next;
  155.         // Scorre la lista
  156.         while (next != NULL)
  157.         // Dall'elemento fino alla fine
  158.         {
  159.             if (current_person->age > next->age)
  160.             // Se l'eta è maggiore dell'età del successivo
  161.             {
  162.                 // Scambio il contenuto delle liste
  163.                 std::swap(next->name, current_person->name);
  164.                 std::swap(next->age, current_person->age);
  165.             }
  166.             next = next->next;
  167.         }
  168.         current_person = current_person->next;
  169.     }
  170.     cout << "OPERAZIONE COMPLETATA: Lista ordinata" << endl;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement