Advertisement
Guest User

Untitled

a guest
Mar 21st, 2019
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.81 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <malloc.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. struct Muzeu
  6. {
  7. int nrVizitatori;
  8. char* denumire;
  9. float pretBilet;
  10. };
  11.  
  12. Muzeu initializareMuzeu(int nrVizitatori, const char* denumire, float pretBilet)
  13. {
  14. Muzeu m;
  15. m.nrVizitatori = nrVizitatori;
  16. m.pretBilet = pretBilet;
  17. m.denumire = (char*)malloc(sizeof(char)*strlen(denumire) + 1);
  18. strcpy(m.denumire, denumire);
  19. return m;
  20. }
  21.  
  22. void printMuzeu(Muzeu m)
  23. {
  24. printf("Muzeul %s are incasari de %5.2f.\n", m.denumire, m.nrVizitatori*m.pretBilet);
  25. }
  26.  
  27. struct Nod
  28. {
  29. Muzeu info;
  30. Nod* next;
  31. };
  32.  
  33. Nod* pushStack(Nod* cap, Muzeu m)
  34. {
  35. //la inceput
  36. Nod* nodNou = (Nod*)malloc(sizeof(Nod));
  37. nodNou->info = m;
  38. nodNou->next = cap;
  39. return nodNou;
  40. }
  41.  
  42. Muzeu popStack(Nod* &cap)
  43. {
  44. if (cap)
  45. {
  46. //Muzeu rezultat = cap->info; //shallow copy
  47. Muzeu rezultat = initializareMuzeu(cap->info.nrVizitatori, cap->info.denumire, cap->info.pretBilet); //deep copy
  48. Nod* aux = cap;
  49. cap = cap->next;
  50. free(aux->info.denumire);
  51. free(aux);
  52. return rezultat;
  53. }
  54. else
  55. {
  56. return initializareMuzeu(0, "", 0);
  57. }
  58. }
  59.  
  60. int isEmptyStack(Nod* cap)
  61. {
  62. return cap == NULL;
  63. }
  64. struct NodDublu
  65. {
  66. Muzeu info;
  67. NodDublu* next;
  68. NodDublu* prev;
  69. };
  70.  
  71. struct ListaDubla
  72. {
  73. NodDublu* prim;
  74. NodDublu* ultim;
  75. };
  76.  
  77. ListaDubla pushQueue(ListaDubla lista, Muzeu m)
  78. {
  79. NodDublu* nodNou = (NodDublu*)malloc(sizeof(NodDublu));
  80. nodNou->info = m;
  81. nodNou->next = NULL;
  82. nodNou->prev = lista.ultim;
  83. if (lista.ultim)
  84. {
  85. lista.ultim->next = nodNou;
  86. lista.ultim = nodNou;
  87. }
  88. else
  89. {
  90. lista.prim = lista.ultim = nodNou;
  91. }
  92. return lista;
  93. }
  94.  
  95. Muzeu popQueue(ListaDubla &lista)
  96. {
  97. if (lista.prim)
  98. {
  99. Muzeu rezultat = lista.prim->info; //shallow copy
  100. NodDublu* aux = lista.prim;
  101. lista.prim = lista.prim->next;
  102. free(aux);
  103. if (lista.prim)
  104. {
  105. lista.prim->prev = NULL;
  106. }
  107. else
  108. {
  109. lista.ultim = NULL;
  110. }
  111. return rezultat;
  112. }
  113. else
  114. {
  115. return initializareMuzeu(0, "", 0);
  116. }
  117. }
  118.  
  119. int isEmptyQueue(ListaDubla lista)
  120. {
  121. return lista.prim == NULL;
  122. }
  123.  
  124. Muzeu incasariMaxime(Nod* &stiva)
  125. {
  126. if (stiva)
  127. {
  128. Muzeu rezultat = initializareMuzeu(0, "Default", 0);
  129. Nod* stivaAux = NULL;
  130. while (!isEmptyStack(stiva))
  131. {
  132. Muzeu m = popStack(stiva);
  133. if ((m.nrVizitatori*m.pretBilet) > (rezultat.nrVizitatori*rezultat.pretBilet))
  134. {
  135. rezultat = m;
  136. }
  137. stivaAux = pushStack(stivaAux, m);
  138. }
  139. rezultat = initializareMuzeu(rezultat.nrVizitatori, rezultat.denumire, rezultat.pretBilet);
  140. while (!isEmptyStack(stivaAux))
  141. {
  142. stiva = pushStack(stiva, popStack(stivaAux));
  143. }
  144. return rezultat;
  145. }
  146. }
  147.  
  148. void main()
  149. {
  150. Nod* stiva = NULL;
  151. stiva = pushStack(stiva, initializareMuzeu(1000, "Luvru", 30));
  152. stiva = pushStack(stiva, initializareMuzeu(300, "Antipa", 25));
  153. stiva = pushStack(stiva, initializareMuzeu(100, "Satului", 15));
  154. stiva = pushStack(stiva, initializareMuzeu(50, "Turnul cu Ceas", 20));
  155.  
  156. while (!isEmptyStack(stiva))
  157. {
  158. printMuzeu(popStack(stiva)); //ca sa accesez elemente de la baza stivei, este nevoie sa fac pop celor de deasupra
  159. }
  160.  
  161. ListaDubla coada;
  162. coada.prim = NULL;
  163. coada.ultim = NULL;
  164. coada = pushQueue(coada, initializareMuzeu(1000, "Luvru", 30));
  165. coada = pushQueue(coada, initializareMuzeu(300, "Antipa", 25));
  166. coada = pushQueue(coada, initializareMuzeu(100, "Satului", 15));
  167. coada = pushQueue(coada, initializareMuzeu(50, "Turnul cu Ceas", 20));
  168.  
  169. printf("\n\n\n");
  170.  
  171. /*while (!isEmptyQueue(coada))
  172. {
  173. printMuzeu(popQueue(coada));
  174. }*/
  175.  
  176. while (!isEmptyQueue(coada))
  177. {
  178. stiva = pushStack(stiva, popQueue(coada));
  179. }
  180.  
  181. /*Muzeu m = incasariMaxime(stiva);
  182. printMuzeu(m);
  183. free(m.denumire);
  184. printf("\n");*/
  185.  
  186. while (!isEmptyStack(stiva))
  187. {
  188. Muzeu m = popStack(stiva);
  189. printMuzeu(m);
  190. free(m.denumire);
  191. }
  192. getch();
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement