Advertisement
J00ker

Untitled

May 11th, 2015
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  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. void InserNr(Lista a)
  102. {
  103. for(Nod *p = a.L; p != NULL; p = p -> leg)
  104. if(p -> info % 2 == 0)
  105. a.Inserare2(p, p -> info + 1);
  106. }
  107.  
  108. void Elim5(Lista a)
  109. {
  110. Nod *q, *p;
  111. while(a.L -> info % 5 == 0) a.Sterge1();
  112. q = a.L; p = q -> leg;
  113. while(p != NULL)
  114. {
  115. if(p -> info % 5 == 0)
  116. {
  117. a.Sterge2(q);
  118. p = q -> leg;
  119. }
  120. else
  121. {
  122. q = q -> leg;
  123. p = q -> leg;
  124. }
  125. }
  126.  
  127. }
  128.  
  129. int main()
  130. {
  131.  
  132. Lista a;
  133. a.Init();
  134.  
  135. srand(time(0));
  136. for(int i = 1; i <= 10; i++)
  137. a.Inserare1(rand() % 100 + 1);
  138.  
  139. a.Parcurgere();
  140.  
  141. /* -1-
  142. InserNr(a);
  143. a.Parcurgere();
  144. */
  145.  
  146. Elim5(a);
  147. a.Parcurgere();
  148.  
  149.  
  150.  
  151. return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement