Advertisement
J00ker

Untitled

May 20th, 2015
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.56 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.  
  102.  
  103. int main()
  104. {
  105. int i, n, x;
  106. srand(time(0));
  107.  
  108. Lista L1; L1.Init();
  109. n = rand() % 10 + 1;
  110. x = rand() % 10 + 1;
  111. L1.Inserare1(x);
  112. for(i = 2; i <= n; i++)
  113. {
  114. x += rand() % 10 + 1;
  115. L1.Inserare3(i, x);
  116. }
  117.  
  118. Lista L2; L2.Init();
  119. n = rand() % 10 + 1;
  120. x = rand() % 10 + 1;
  121. L2.Inserare1(x);
  122. for(i = 2; i <= n; i++)
  123. {
  124. x += rand() % 10 + 1;
  125. L2.Inserare3(i, x);
  126. }
  127.  
  128. cout << "L1: "; L1.Parcurgere();
  129. cout << "L2: "; L2.Parcurgere();
  130.  
  131. Lista L; L.Init();
  132. Nod *p, *q;
  133. p = L1.L; q = L2.L;
  134. if(p -> info < q -> info)
  135. {
  136. L.Inserare1(p -> info);
  137. p = p -> leg;
  138. }
  139. else
  140. {
  141. L.Inserare1(q -> info);
  142. q = q -> leg;
  143. }
  144. int poz = 1;
  145. while((p != NULL) && (q != NULL))
  146. {
  147. if(p -> info < q -> info)
  148. {
  149. L.Inserare3(poz++, p -> info);
  150. p = p -> leg;
  151. }
  152. else
  153. {
  154. L.Inserare3(poz++, q -> info);
  155. q = q -> leg;
  156. }
  157. }
  158. while(p != NULL)
  159. {
  160. L.Inserare3(poz++, p -> info);
  161. p = p -> leg;
  162. }
  163. while(q != NULL)
  164. {
  165. L.Inserare3(poz++, q -> info);
  166. q = q -> leg;
  167. }
  168. cout << "L: "; L.Parcurgere();
  169.  
  170. return 0;
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement