Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. typedef int adresa; //rebotezare tip int cu numele adresa pentru deosebire intre informatia propriu-zisa si adresa unui nod
  5. struct nod //declarare nod
  6. {int info; //informatia nodului
  7. adresa urm; //adresa catre nodul urmator
  8. };
  9. nod L[1000]; //declarare vector cu elemente de tip nod cu maxim 1000 elemente
  10. int nr_elem; //nr de noduri din lista la un moment dat
  11. adresa ocupat[1000],sf,v; //1 daca elementul e ocupat si 0 altfel
  12.  
  13. int Exista_spatiu() //testeaza dacaexista spatiu disponibil pentru alocarea unui nod
  14. {
  15. return nr_elem<1000;
  16. }
  17.  
  18. void Aloca(adresa &x)//alocare spatiu pentru un nod, pe prima componenta libera gasita
  19. {
  20. adresa i=1;
  21. while(ocupat[i]) i++;
  22. x=i;
  23. ocupat[i]=1;
  24. nr_elem++;
  25. }
  26.  
  27. void Elibereaza(adresa x) //eliberare spatiu la stergerea unui nod
  28. {
  29. ocupat[x]=0;
  30. nr_elem--;
  31. }
  32.  
  33. void Adaugare(adresa &v,int val)
  34. {
  35. int c;
  36. if(!v)//daca v=0, lista e vida si se creeaza primul nod, ce primeste info val si adresa v
  37. {
  38. Aloca(v);
  39. L[v].info=val;
  40. L[v].urm=0;
  41. sf=v; //ultimul nod al listei e sf
  42. }
  43. else
  44. if(Exista_spatiu)
  45. { //se adauga la sfarsitul unei liste nevide un element
  46. Aloca(c);
  47. L[sf].urm=c;
  48. L[c].info=val;
  49. L[c].urm=0;
  50. sf=c;
  51. }
  52. else cout<<"lipsa spatiu"<<endl;
  53. }
  54.  
  55. void Inserare_dupa(adresa v,int val, int val1) //insereaza nodul cu info val1 dupa nodul cu info val
  56. {
  57. adresa c,d;
  58. if(Exista_spatiu())
  59. {
  60. c=v;
  61. while(L[c].info!=val) c=L[c].urm; //se cauta nodul cu info val
  62. Aloca(d);//se aloca spatiu pentru noul nod
  63. L[d].info=val1;
  64. L[d].urm=L[c].urm;
  65. L[c].urm=d;
  66. if(L[d].urm==0) sf=d;
  67. }
  68. else cout<<"lipsa spatiu"<<endl;
  69. }
  70.  
  71. void Inserare_inainte(adresa &v,int val, int val1)//insereaza nodul cu info val1 inainte de nodul cu info val
  72. {
  73. adresa c,d;
  74. if(Exista_spatiu())
  75. if(L[v].info==val)
  76. {
  77. Aloca(d);
  78. L[d].info=val1;
  79. L[d].urm=v;
  80. v=d;
  81. }
  82. else
  83. {
  84. c=v;
  85. while(L[L[c].urm].info!=val) c=L[c].urm;
  86. Aloca(d);
  87. L[d].info=val1;
  88. L[d].urm=L[c].urm;
  89. L[c].urm=d;
  90. }
  91. else cout<<"nu e spatiu "<<endl;
  92. }
  93.  
  94. void Sterg(adresa &v, int val) //sterge nodul cu informatia val
  95. {
  96. adresa c,man;
  97. if(L[v].info==val)
  98. {
  99. man=v;
  100. v=L[v].urm;
  101. }
  102. else
  103. {
  104. c=v;
  105. while(L[L[c].urm].info!=val) c=L[c].urm;
  106. man=L[c].urm;
  107. L[c].urm=L[man].urm;
  108. if(man==sf) sf=c;
  109. }
  110. Elibereaza(man);
  111. }
  112.  
  113. void Afisare(adresa v)
  114. {
  115. adresa c=v;
  116. while(c)
  117. {
  118. cout<<L[c].info<<" ";
  119. c=L[c].urm;
  120. }
  121. cout<<endl;
  122. }
  123.  
  124. int Cautare(int x)
  125. {
  126. int p;
  127. while(p && L[p].info!=x)
  128. p=L[p].urm;
  129. return(p);
  130. }
  131. int main()
  132. {
  133. int i; vvv
  134. for(i=1;i<=10;i++)
  135. Adaugare(v,i);
  136. Afisare(v);
  137. Inserare_dupa(v,1,15); Afisare(v);
  138. Inserare_dupa(v,10,25); Afisare(v);
  139. Inserare_inainte(v,3,29);Afisare(v);
  140. Sterg(v,5);Afisare(v);
  141. cout<<"nodul cu info 25 se afla pe pozitia "<<Cautare(25);
  142. return 0;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement