Advertisement
J00ker

Untitled

May 14th, 2015
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.16 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. void Completare50(Lista a)
  103. {
  104. if(a.L -> info != 1) a.Inserare1(1);
  105. Nod *p = a.L;
  106. while(p -> leg != NULL)
  107. {
  108. if(p -> leg -> info != p -> info + 1)
  109. a.Inserare2(p, p -> info + 1);
  110. p = p -> leg;
  111. }
  112. }
  113. */
  114.  
  115. int main()
  116. {
  117. Lista a; a.Init();
  118. int x;
  119. Nod *p;
  120. srand(time(0));
  121.  
  122. x = rand() % 10 + 1; a.Inserare1(x);
  123. p = a.L;
  124. while(x <=45)
  125. {
  126. x += rand() % 5 + 1;
  127. a.Inserare2(p, x);
  128. p = p -> leg;
  129. }
  130. a.Parcurgere();
  131.  
  132. //Completare50(a);
  133. if(a.L -> info != 1)
  134. a.Inserare1(1);
  135. p = a.L;
  136. while(p -> leg != NULL)
  137. {
  138. if(p -> leg -> info != p -> info + 1)
  139. a.Inserare2(p, p -> info + 1);
  140. p = p -> leg;
  141. }
  142. while(p -> info < 50)
  143. {
  144. a.Inserare2(p, p -> info + 1);
  145. p = p -> leg;
  146. }
  147. a.Parcurgere();
  148.  
  149. return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement