Advertisement
J00ker

L

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