Advertisement
J00ker

Untitled

May 13th, 2015
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.81 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. void InserOrd(int x, Lista a)
  102. {
  103. Nod *p = a.L;
  104. if(p -> info >= x)
  105. {
  106. a.Inserare1(x);
  107. return;
  108. }
  109. while((p -> leg != NULL) && (p -> leg -> info <= x))
  110. p = p -> leg;
  111. a.Inserare2(p, x);
  112. }
  113.  
  114. int main()
  115. {
  116. Lista a; a.Init();
  117. srand(time(0));
  118. int x = rand() % 10 + 1; a.Inserare1(x);
  119. for(int i = 1; i <= 9; i++)
  120. {
  121. x += rand() % 20 + 1;
  122. a.Inserare3(i, x);
  123. }
  124. a.Parcurgere();
  125.  
  126. x = rand() % 1000 + 1; cout << x << "\n";
  127. InserOrd(x, a);
  128. a.Parcurgere();
  129.  
  130. return 0;
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement