icatalin

Laborator-2-ASD-Liste.txt

Jan 5th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. struct Node
  5. {
  6.     int info;
  7.     Node* next;
  8. };
  9.  
  10. class Lista
  11. {
  12. public:
  13.     Node* head;
  14.     int counter = 0;
  15.     void insert(int val, int poz);
  16.     void delbyIndex(int poz);
  17.     void print();
  18.     void reverse();
  19.     void deleteList();
  20. };
  21.  
  22. void Lista::print()
  23. {
  24.     Node* temp = head;
  25.     cout<<"\nAfisare lista cu "<<counter<<" noduri: ";
  26.     while(temp != NULL)
  27.     {
  28.         cout<<temp->info<<" ";
  29.         temp = temp->next;
  30.     }
  31. }
  32. void Lista::insert(int val, int poz)
  33. {
  34.     Node* newNode = new Node;
  35.     newNode->info = val;
  36.     newNode->next = NULL;
  37.     counter++;
  38.     if(head == NULL)
  39.     {
  40.         head = newNode;
  41.         return;
  42.     }
  43.     if(poz == 0)
  44.     {
  45.         newNode->next = head;
  46.         head = newNode;
  47.         return;
  48.     }
  49.     int i = 0;
  50.     Node* temp = head;
  51.     while(temp->next != NULL && i < poz-1)
  52.     {
  53.         temp = temp->next;
  54.         i++;
  55.     }
  56.     newNode->next = temp->next;
  57.     temp->next = newNode;
  58. }
  59.  
  60. void Lista::delbyIndex(int poz)
  61. {
  62.     if(head == NULL)
  63.         return;
  64.     counter--;
  65.     if(poz == 0)
  66.     {
  67.         Node* deSters = head;
  68.         head = head->next;
  69.         delete deSters;
  70.         return;
  71.     }
  72.     int i = 0;
  73.     Node* temp = head;
  74.     while(temp->next != NULL && i < poz-1) //parcurg lista pana la predecesorul elementului de sters
  75.     {
  76.         temp = temp->next;
  77.         i++;
  78.     }
  79.     Node* deSters = temp->next;
  80.     if(temp->next->next != NULL)
  81.         temp->next = temp->next->next; //elimin legaturile cu elementul care trebuie sters
  82.     else temp->next = NULL; //daca elementul de sters era pe ultima pozitie, el va deveni null
  83.     delete deSters;
  84. }
  85.  
  86. void Lista::reverse()
  87. {
  88.     Node* current = head, *prev = NULL, *urm = NULL;
  89.     while(current != NULL)
  90.     {
  91.         urm = current-> next;
  92.         current->next = prev; //inversez directia de mers
  93.         prev = current;
  94.         current = urm;
  95.     }
  96.     head = prev;
  97. }
  98. void Lista::deleteList()
  99. {
  100.     Node* deSters = head;
  101.     while(head != NULL)
  102.     {
  103.         head = head->next;
  104.         delete deSters;
  105.         deSters = head;
  106.         counter--;
  107.         cout<<"S-a sters un element. Counter = "<<counter<<endl;
  108.     }
  109. }
  110. int main()
  111. {
  112.     Lista p;
  113.     p.head = NULL;
  114.     p.insert(1,0);
  115.     p.print();
  116.     p.insert(2,1);
  117.     p.print();
  118.     p.insert(3,1);
  119.     p.print();
  120.     p.insert(4,3);
  121.     p.print();
  122.     p.insert(5,3);
  123.     p.print();
  124.     p.delbyIndex(4);
  125.     p.print();
  126.     p.delbyIndex(1);
  127.     p.print();
  128.     p.reverse();
  129.     cout<<"\nAfisare lista dupa inversare: ";
  130.     p.print();
  131.     cout<<"\nCounter-ul inainte de stergerea listei: "<<p.counter<<endl;
  132.     cout<<"STERGERE LISTA\n";
  133.     p.deleteList();
  134.  
  135.     return 0;
  136. }
Add Comment
Please, Sign In to add comment