Advertisement
J00ker

T3

Oct 22nd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.25 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct Nod {
  6.     int val;
  7.     Nod *next = NULL;
  8. };
  9.  
  10. struct Lista {
  11.     Nod *prim = NULL, *ult = NULL, *p = NULL;
  12.     /// int lg = 0;
  13.  
  14.     void AdaugareInceput(int x) {
  15.         /// if(lg == 0) {
  16.         if(prim == NULL) {
  17.             prim = new Nod;
  18.             prim->val = x;
  19.             prim->next = NULL;
  20.             ult = prim;
  21.         }
  22.         else {
  23.             p = new Nod;
  24.             p->val = x;
  25.             p->next = prim;
  26.             prim = p;
  27.         }
  28.         /// lg++;
  29.     }
  30.  
  31.     void AdaugareSfarsit(int x) {
  32.         /// if(lg == 0) {
  33.         if(ult == NULL) {
  34.             ult = new Nod;
  35.             ult->val = x;
  36.             ult->next = NULL;
  37.             prim = ult;
  38.         }
  39.         else {
  40.             p = new Nod;
  41.             p->val = x;
  42.             p->next = NULL;
  43.             ult->next = p;
  44.             ult = p;
  45.         }
  46.         /// lg++;
  47.     }
  48.  
  49.     void Afisare() {
  50.         cout << "\n";
  51.  
  52.         p = prim;
  53.         while(p != NULL) {
  54.             cout << p->val << " ";
  55.             p = p->next;
  56.         }
  57.  
  58.         cout << "\n";
  59.     }
  60.  
  61.     int CautareDupaValoare(int v) {
  62.         int poz = 1;
  63.  
  64.         p = prim;
  65.         while(p != NULL) {
  66.             if(p->val == v) return poz;
  67.             p = p->next;
  68.             poz++;
  69.         }
  70.  
  71.         return -1;
  72.     }
  73.  
  74.     int CautareDupaPozitie(int poz) {
  75.         if(poz < 1) return -1;
  76.         int poz2 = 1;
  77.  
  78.         p = prim;
  79.         while(p != NULL) {
  80.             if(poz == poz2) return p->val;
  81.             p = p->next;
  82.             poz2++;
  83.         }
  84.  
  85.         return -1;
  86.     }
  87.  
  88.     void AdaugareDupaValoare(int v, int x) {
  89.         p = prim;
  90.         while(p != NULL) {
  91.             if(p->val == v) {
  92.                 Nod *aux = new Nod;
  93.                 aux->val = x;
  94.                 aux->next = p->next;
  95.  
  96.                 p->next = aux;
  97.  
  98.                 if(p == ult) ult = aux;
  99.  
  100.                 return;
  101.             }
  102.             p = p->next;
  103.         }
  104.     }
  105.  
  106.     void AdaugareDupaPozitie(int poz, int x) {
  107.         if(poz < 1) return;
  108.  
  109.         int poz2 = 1;
  110.  
  111.         p = prim;
  112.         while(p != NULL) {
  113.             if(poz == poz2) {
  114.                 Nod *aux = new Nod;
  115.                 aux->val = x;
  116.                 aux->next = p->next;
  117.  
  118.                 p->next = aux;
  119.  
  120.                 if(p == ult) ult = aux;
  121.  
  122.                 return;
  123.             }
  124.             p = p->next;
  125.             poz2++;
  126.         }
  127.     }
  128.  
  129.     void StergereDupaValoare(int v) {
  130.         Nod *prev;
  131.  
  132.         p = prev = prim;
  133.         while(p != NULL) {
  134.             if(p->val == v) {
  135.                 if(p == prim && p == ult) {
  136.                     prim = ult = p->next; /// NULL
  137.                     delete p;
  138.                     return;
  139.                 }
  140.                 if(p == prim) {
  141.                     prim = p->next;
  142.                     delete p;
  143.                     return;
  144.                 }
  145.                 if(p == ult) {
  146.                     ult = prev;
  147.                     delete p;
  148.                     return;
  149.                 }
  150.  
  151.                 prev->next = p->next;
  152.                 delete p;
  153.             }
  154.             prev = p;
  155.             p = p->next;
  156.         }
  157.     }
  158.  
  159.     void StergereDupaPozitie(int poz) {
  160.         if(poz < 1) return;
  161.  
  162.         Nod *prev;
  163.         int poz2 = 1;
  164.  
  165.         p = prev = prim;
  166.         while(p != NULL) {
  167.             if(poz == poz2) {
  168.                 if(p == prim && p == ult) {
  169.                     prim = ult = p->next; /// NULL
  170.                     delete p;
  171.                     return;
  172.                 }
  173.                 if(p == prim) {
  174.                     prim = p->next;
  175.                     delete p;
  176.                     return;
  177.                 }
  178.                 if(p == ult) {
  179.                     ult = prev;
  180.                     ult->next = NULL;
  181.                     delete p;
  182.                     return;
  183.                 }
  184.  
  185.                 prev->next = p->next;
  186.                 delete p;
  187.             }
  188.             poz2++;
  189.             prev = p;
  190.             p = p->next;
  191.         }
  192.     }
  193.  
  194. };
  195.  
  196. int main() {
  197.     Lista L;
  198.  
  199.     int rasp = 1, v, p, x;
  200.     while(rasp) {
  201.         cout << "1) Adauga un element la inceputul listei.\n";
  202.         cout << "2) Adauga un element la finalul listei.\n";
  203.         cout << "3) Afiseaza lista.\n";
  204.         cout << "4) Cauta un element dupa o valoare.\n";
  205.         cout << "5) Cauta un element dupa o pozitie.\n";
  206.         cout << "6) Insereaza un element dupa o valoare.\n";
  207.         cout << "7) Insereaza un element dupa o pozitie.\n";
  208.         cout << "8) Sterge un element dupa o valoare.\n";
  209.         cout << "9) Sterge un element dupa o pozitie.\n";
  210.         cout << "0) Iesire\n";
  211.         cout << "\n";
  212.  
  213.         cout << "Raspuns: "; cin >> rasp;
  214.  
  215.         switch(rasp) {
  216.             case 1:
  217.                 cout << "Element: "; cin >> x;
  218.                 L.AdaugareInceput(x);
  219.                 break;
  220.             case 2:
  221.                 cout << "Element: "; cin >> x;
  222.                 L.AdaugareSfarsit(x);
  223.                 break;
  224.             case 3:
  225.                 cout << "Elementele: ";
  226.                 L.Afisare();
  227.                 break;
  228.             case 4:
  229.                 cout << "Valoare: "; cin >> v;
  230.                 cout << "Pozitia " << L.CautareDupaValoare(v) << "\n";
  231.                 break;
  232.             case 5:
  233.                 cout << "Pozitie: "; cin >> p;
  234.                 cout << "Valoarea " << L.CautareDupaPozitie(p) << "\n";
  235.                 break;
  236.             case 6:
  237.                 cout << "Valoare: "; cin >> v;
  238.                 cout << "Element: "; cin >> x;
  239.                 L.AdaugareDupaValoare(v, x);
  240.                 break;
  241.             case 7:
  242.                 cout << "Pozitie: "; cin >> p;
  243.                 cout << "Element: "; cin >> x;
  244.                 L.AdaugareDupaPozitie(p, x);
  245.                 break;
  246.             case 8:
  247.                 cout << "Valoare: "; cin >> v;
  248.                 L.StergereDupaValoare(v);
  249.                 break;
  250.             case 9:
  251.                 cout << "Pozitie: "; cin >> p;
  252.                 L.StergereDupaPozitie(p);
  253.                 break;
  254.             default:
  255.                 break;
  256.         }
  257.  
  258.         cout << "\n";
  259.     }
  260.  
  261.  
  262.     return 0;
  263. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement