Advertisement
J00ker

Untitled

May 12th, 2015
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 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.  
  14. struct Lista /// Simplu inlantuita
  15. {
  16. Nod *L;
  17.  
  18. void Inserare1(int x) /// Inserare la inceput
  19. {
  20. Nod *p;
  21. p = new Nod;
  22. p -> info = x;
  23. p -> leg = L;
  24. L = p;
  25. }
  26.  
  27. void Inserare2(Nod *p, int x) /// Inserare dupa nodul de adresa memorata in p
  28. {
  29. Nod *q;
  30. q = new Nod;
  31. q -> info = x;
  32. q -> leg = p -> leg;
  33. p -> leg = q;
  34. }
  35.  
  36. /// Insereaza dupa al k-lea nod
  37. /// un nou nod cu informatia x;
  38. /// Daca lista are mai putin de
  39. /// k noduri, inserarea se face
  40. /// la sfarsitul listei.
  41. void Inserare3(int k, int x)
  42. {
  43. Nod *p, *q;
  44. for(p = L; (k > 1) && (p != NULL); p = p -> leg)
  45. {
  46. k--;
  47. q = p;
  48. }
  49. if(p == NULL) /// Inserez dupa q
  50. Inserare2(q, x);
  51. else /// Inserez dupa p
  52. Inserare2(p, x);
  53. }
  54.  
  55. void Parcurgere() /// Parcurgerea listei
  56. {
  57. for(Nod *p = L; p != NULL; p = p -> leg)
  58. cout << p -> info << " ";
  59. cout << "\n";
  60. }
  61.  
  62. void Init() /// Initializarea listei vide
  63. {
  64. L = NULL;
  65. }
  66.  
  67. void Sterge1() /// Stergerea primului nod
  68. {
  69. if(L = NULL) return;
  70. Nod *p;
  71. p = L;
  72. L = p -> leg;
  73. delete p;
  74. }
  75.  
  76. void Sterge2(Nod *p) /// Stergerea nodului dupa nodul de adresa memorata p
  77. {
  78. Nod *q;
  79. q = p -> leg;
  80. p -> leg = q -> leg;
  81. delete q;
  82. }
  83.  
  84. Nod *Cautare(int x) /// Cautarea valorii x in lista si returnarea pointer-ului
  85. {
  86. Nod *p;
  87. for(p = L; p != NULL; p = p -> leg)
  88. if(p -> info == x)
  89. return p;
  90. return NULL;
  91. }
  92.  
  93. void ParcDS(Nod *p) /// Parcurgerea de la dreapta la stanga a nodurilor listei
  94. {
  95. if(p != NULL)
  96. {
  97. ParcDS(p -> leg);
  98. cout << p -> info << " ";
  99. }
  100. }
  101. };
  102.  
  103. void InserNr(Lista a)
  104. {
  105. for(Nod *p = a.L; p != NULL; p = p -> leg)
  106. if(p -> info % 2 == 0)
  107. a.Inserare2(p, p -> info + 1);
  108. }
  109.  
  110. void Elim5(Lista a)
  111. {
  112. while(a.L != NULL && a.L -> info % 5 == 0) a.Sterge1();
  113. for(Nod *p = a.L; p -> leg != NULL; )
  114. if(p -> leg -> info % 5 == 0)
  115. a.Sterge2(p);
  116. else
  117. p = p -> leg;
  118. }
  119.  
  120. void AfisCheie(Lista a, int k)
  121. {
  122. Nod *p = a.L;
  123. for(p = a.L; k > 1 && p != NULL; p = p -> leg)
  124. k--;
  125. if(p == NULL) cout << "Nu se este."
  126. cout << p -> info;
  127. }
  128.  
  129. void AfisCheieDS(Lista a, int k)
  130. {
  131. Nod *q , *p;
  132. q = p = a.L;
  133. for(int i = 1; i <= k; i++)
  134. p = p -> leg;
  135.  
  136. while(p != NULL)
  137. {
  138. q = q -> leg;
  139. p = p -> leg;
  140. }
  141.  
  142. cout << q -> info;
  143. }
  144.  
  145. int main()
  146. {
  147.  
  148. Lista a;
  149. a.Init();
  150.  
  151. srand(time(0));
  152. for(int i = 1; i <= 10; i++)
  153. a.Inserare1(rand() % 100 + 1);
  154.  
  155. a.Parcurgere();
  156.  
  157. /* -1-
  158. InserNr(a);
  159. a.Parcurgere();
  160. */
  161.  
  162. /*
  163. Elim5(a);
  164. a.Parcurgere();
  165. */
  166.  
  167. /// Sa se afiseze cheiea celui de-al k-lea nod
  168. /// Daca lista are mai putin de k noduri, se va afisa un mesaj
  169. //AfisCheie(a, 3);
  170.  
  171. /// De la DR la ST
  172. AfisCheieDS(a, 3);
  173.  
  174. return 0;
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement