Advertisement
J00ker

Untitled

May 27th, 2015
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. struct Nod
  8. {
  9.     int info;
  10.     Nod *leg;
  11. };
  12.  
  13. struct Lista                            /// Simplu inlantuita
  14. {
  15.     Nod *L;
  16.     void Inserare1(int x)               /// Inserare la inceput
  17.     {
  18.         Nod *p;
  19.         p = new Nod;
  20.         p -> info = x;
  21.         p -> leg = L;
  22.         L = p;
  23.     }
  24.  
  25.     void Inserare2(Nod *p, int x)       /// Inserare dupa nodul de adresa memorata in p
  26.     {
  27.         Nod *q;
  28.         q = new Nod;
  29.         q -> info = x;
  30.         q -> leg = p -> leg;
  31.         p -> leg = q;
  32.     }
  33.  
  34.     ///     Insereaza dupa al k-lea nod
  35.     /// un nou nod cu informatia x;
  36.     /// Daca lista are mai putin de
  37.     /// k noduri, inserarea se face
  38.     /// la sfarsitul listei.
  39.     void Inserare3(int k, int x)
  40.     {
  41.         Nod *p, *q;
  42.         for(p = L; (k > 1) && (p != NULL); p = p -> leg)
  43.         {
  44.             k--;
  45.             q = p;
  46.         }
  47.         if(p == NULL) /// Inserez dupa q
  48.             Inserare2(q, x);
  49.         else /// Inserez dupa p
  50.             Inserare2(p, x);
  51.     }
  52.  
  53.     void Parcurgere()                   /// Parcurgerea listei
  54.     {
  55.         for(Nod *p = L; p != NULL; p = p -> leg)
  56.             cout << p -> info << " ";
  57.         cout << "\n";
  58.     }
  59.  
  60.     void Init()                         /// Initializarea listei vide
  61.     {
  62.         L = NULL;
  63.     }
  64.  
  65.     void Sterge1()                      /// Stergerea primului nod
  66.     {
  67.         if(L = NULL) return;
  68.         Nod *p;
  69.         p = L;
  70.         L = p -> leg;
  71.         delete p;
  72.     }
  73.  
  74.     void Sterge2(Nod *p)                /// Stergerea nodului dupa nodul de adresa memorata p
  75.     {
  76.         Nod *q;
  77.         q = p -> leg;
  78.         p -> leg = q -> leg;
  79.         delete q;
  80.     }
  81.  
  82.     Nod *Cautare(int x)                 /// Cautarea valorii x in lista si returnarea pointer-ului
  83.     {
  84.         Nod *p;
  85.         for(p = L; p != NULL; p = p -> leg)
  86.             if(p -> info == x)
  87.                 return p;
  88.         return NULL;
  89.     }
  90.  
  91.     void ParcDS(Nod *p) /// Parcurgerea de la dreapta la stanga a nodurilor listei
  92.     {
  93.         if(p != NULL)
  94.         {
  95.             ParcDS(p -> leg);
  96.             cout << p -> info << " ";
  97.         }
  98.     }
  99. };
  100.  
  101. int main()
  102. {
  103.     Lista a, par, impar;
  104.     a.Init(); par.Init(); impar.Init();
  105.     int n, i;
  106.  
  107.     srand(time(0));
  108.     n = rand() % 10 + 1;
  109.     for(i = 1; i <= n; i++)
  110.         a.Inserare1(rand() % 20 + 1);
  111.  
  112.     Nod *p = a.L;
  113.     while(p != NULL)
  114.     {
  115.         if(p -> info % 2 == 0)
  116.             par.Inserare1(p -> info);
  117.         else
  118.             impar.Inserare1(p -> info);
  119.         p = p -> leg;
  120.     }
  121.  
  122.     cout << "a: "; a.Parcurgere();
  123.     cout << "pare: "; par.Parcurgere();
  124.     cout << "impare: "; impar.Parcurgere();
  125.  
  126.     return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement