Advertisement
J00ker

Untitled

May 20th, 2015
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 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.  
  103. int main()
  104. {
  105. Lista cif; cif.Init();
  106. int i, n, poz = 1;
  107. cout << "n: "; cin >> n;
  108. cif.Inserare1(n % 10);
  109. n /= 10;
  110. while(n)
  111. {
  112. cif.Inserare3(poz++, n % 10);
  113. n /= 10;
  114. }
  115. cif.Parcurgere();
  116.  
  117. return 0;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement