Posted By

ppofuk on 11/15/10


Tagged

stack implementation stog


Versions (?)

Primjer implementacije stoga


 / Published in: C++
 

  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. typedef struct _automobil
  5. {
  6. unsigned int serijski_broj, god;
  7. char model [30], proizvodjac [30];
  8.  
  9. } automobil;
  10.  
  11. #define STACK_TYPE automobil
  12. #include "stog_polje.h"
  13. #include "stog_pokazivac.h"
  14. using namespace std;
  15.  
  16. #ifdef STACK_TYPE_LIST
  17. /* Ispis svih elemenata na stogu - ako je stog lista
  18.   Ispisuje se samo model i godina proizvodnje.
  19. */
  20. static inline void ispisi_sve (stog *S)
  21. {
  22. stog *C = S->next;
  23. while (C) {
  24. cout << "Model: " << C->element.model << endl
  25. << "Godina: " << C->element.god << endl
  26. << "Proizvodjac: " << C->element.proizvodjac << "\n\n";
  27. C = C->next;
  28. }
  29. }
  30. #endif
  31.  
  32. #ifdef STACK_TYPE_ARRAY
  33. static inline void ispisi_sve (stog *S)
  34. {
  35. for (int _i = MAXLENGTH - 2; _i >= S->cursor; --_i)
  36. cout << "Model: " << S->elements[_i].model << endl
  37. << "Godina: " << S->elements[_i].god << endl
  38. << "Proizvodjac: " << S->elements[_i].proizvodjac << "\n\n";
  39. }
  40. #endif
  41.  
  42. void dodaj_na_stog
  43. (unsigned int serijski_broj, unsigned int god,
  44. char model[], char proizvodjac[], stog *S)
  45. {
  46. automobil TMP;
  47. TMP.serijski_broj = serijski_broj;
  48. TMP.god = god;
  49. strcpy (TMP.model, model);
  50. strcpy (TMP.proizvodjac, proizvodjac);
  51. PushS(TMP, S);
  52. }
  53.  
  54. void unos_automobila (stog *S)
  55. {
  56. unsigned int serijski_broj, god;
  57. char model[30], proizvodjac[30];
  58.  
  59. cout << "Unesite serijski broj automobila: ";
  60. cin >> serijski_broj;
  61. cout << "Unesite ime modela: ";
  62. cin.ignore(); cin.getline(model, 29);
  63. cout << "Unesite ime proizvodjaca: ";
  64. cin.getline(proizvodjac, 29);
  65. cout << "Unesite godinu proizvodnje: ";
  66. do {
  67. cin >> god;
  68. if (god < 1995 || god > 2010)
  69. cout << "Mora biti u rangu 1995-2010\nGodina proizvodnje: ";
  70. } while (god < 1995 || god > 2010);
  71. dodaj_na_stog (serijski_broj, god, model, proizvodjac, S);
  72. }
  73.  
  74. void iskrcaj_2006 (stog *S)
  75. {
  76. _NEW_STACK(S_temp);
  77. InitS(S_temp);
  78. cout << "Trenutno stanje na stogu: ";
  79. ispisi_sve(S);
  80. cout << "\nIskrcavanje u auto kucu:\n";
  81.  
  82. while (!IsEmpty(S)) {
  83. automobil T = TopS(S);
  84. if (T.god > 2006 && strcmp(T.proizvodjac, "Audi"))
  85. cout << T.proizvodjac << " "
  86. << T.model << ", " << T.god << endl
  87. << T.serijski_broj << endl
  88. << "-----------------\n\n";
  89. PushS(T, S_temp);
  90. PopS (S);
  91. }
  92. while (!IsEmpty(S_temp)) {
  93. PushS((TopS(S_temp)), S);
  94. PopS(S_temp);
  95. }
  96. delete S_temp;
  97.  
  98. cout << "\nIspis stanja stoga:\n";
  99. ispisi_sve(S);
  100.  
  101. }
  102.  
  103. void iskrcaj_audi (stog *S)
  104. {
  105. if (IsEmpty(S)) return;
  106.  
  107. automobil T = TopS(S);
  108. PopS(S);
  109.  
  110. if (strcmp(T.proizvodjac, "Audi") == 0)
  111. cout << T.proizvodjac << " "
  112. << T.model << ", " << T.god << endl
  113. << T.serijski_broj << endl
  114. << "-----------------\n\n";
  115.  
  116. iskrcaj_audi (S);
  117. PushS(T, S);
  118. }
  119.  
  120. void iskrcavanje_audia (stog *S)
  121. {
  122. cout << "Stanje na stogu:\n";
  123. ispisi_sve(S);
  124. cout << "Iskrcavanje: \n";
  125. iskrcaj_audi(S);
  126. cout << "Stanje nakon iskrcavanja: \n";
  127. ispisi_sve(S);
  128. }
  129.  
  130.  
  131. int main (void)
  132. {
  133. _NEW_STACK(S);
  134. InitS(S);
  135. int choice;
  136.  
  137. do {
  138. cout << "1. Unos automobila.\n"
  139. << "2. Iskrcavanje automobila proizvedenih nakon 2006.\n"
  140. << "3. Iskrcavanje automobila marke Audi.\n"
  141. << "4. Kontrolni ispis stoga\n"
  142. << "9. Kraj rada.\n\n";
  143. cin >> choice;
  144.  
  145. switch (choice) {
  146. case 1: unos_automobila(S);
  147. break;
  148. // TODO: other cases
  149. case 2: iskrcaj_2006(S);
  150. break;
  151.  
  152. case 3: iskrcavanje_audia(S);
  153. break;
  154.  
  155. case 4: ispisi_sve(S) ;
  156. break;
  157. }
  158. } while (choice != 9);
  159.  
  160. while (!IsEmpty(S))
  161. PopS(S);
  162. delete S;
  163. return 0;
  164. }

Report this snippet  

You need to login to post a comment.