Advertisement
J00ker

Untitled

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