Posted By

maretic_kristian on 12/03/11


Tagged

red pokazivaci operacije nad redom


Versions (?)

red_pokazivac.h


 / Published in: C++
 

URL: /

Implementacija reda pomocu pokazivaca

  1. // Implementacija programa pomoću pokazivača - Kristian Maretić
  2.  
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. typedef struct el_red red;
  7. typedef struct red_ordinacija el_reda_ordinacije;
  8.  
  9.  
  10. struct pacijent // struktura podataka koji se zapisuju u red
  11. {
  12. int x, y; // random upisani brojevi
  13. int rb_pacijenta; // redni broj pacijenta
  14. int prioritet; // prioritet pacijenta
  15. };
  16.  
  17. struct red_ordinacija // struktura reda
  18. {
  19. pacijent p; // vrijednost elementa u redu (svakog pacijenta)
  20. red_ordinacija *next; // definicija pokazivača na slijedeći element u redu
  21. };
  22.  
  23. struct el_red // struktura elemenata reda
  24. {
  25. red_ordinacija *front, *rear;
  26. };
  27.  
  28. bool IsEmptyQ(red *_r) // provjera je li red prazan
  29. {
  30. bool retVal;
  31. if (_r -> rear == _r -> front) // red je prazan ako je pokazivač na početak i kraj reda jednak
  32. {
  33. retVal = true;
  34. }
  35. else
  36. {
  37. retVal = false;
  38. }
  39.  
  40. return retVal;
  41. }
  42.  
  43. void InitQ (red *_r) // inicijalizacija praznog reda
  44. {
  45. el_reda_ordinacije *head = new el_reda_ordinacije; // inicijalizacija novog elementa reda
  46. _r -> front = head; // postavlja se pokazivač fronta na novi element
  47. _r -> rear = head; // postavlja se pokazivač frara na novi element to znači da je red inicijaliziran ali i prazan
  48. }
  49.  
  50. pacijent FrontQ(red *_r) // vraćanje vrijednosti elementa koji se nalazi na čelu reda
  51. {
  52. if (!IsEmptyQ(_r)) // provjera da li je red prazan
  53. { // ako red nije prazan
  54. el_reda_ordinacije *_temp = _r -> front; // element na čelu se sprema u privremenu _temp varijablu
  55. _temp = _temp -> next; // postavlja se na čelo element koji je slijedeći u redu
  56. return _temp -> p; // postavlja se vrijednost pacijentu
  57. }
  58. }
  59.  
  60. void DeQueueQ(red *_r) // brisanje elementa s čela reda
  61. {
  62. if (!IsEmptyQ(_r)) // provjera dali je red prazan
  63. {
  64. el_reda_ordinacije *_del = _r -> front; //element sa čela reda sprema se u privremenu _del varijablu
  65. _r -> front = _del -> next; // postavlja se novi element čela koji je slijedeći u redu
  66. delete _del; // briše se element s čela
  67. }
  68. }
  69.  
  70. void EnQueueQ (pacijent x, red *_r) // dodavanje novog elementa na začelje reda
  71. {
  72. el_reda_ordinacije *_last = _r -> rear; // element s začelja reda sprema se u privremenu _last varijablu
  73. el_reda_ordinacije *_new = new el_reda_ordinacije; // inicijalizira se novi element reda koji će se postavit na začelje
  74. _new -> p = x; // u novi element sprema se proslijeđena vrijednost pacijenta
  75. _new -> next = NULL; // postavlja se pokazivač novog elementa na NULL pokazivač
  76. _last -> next = _new; // postavlja se pokazivač prethodnog zadnjeg na novi element koji je na začelju
  77. _r -> rear = _new; // novo ubačeni element postavlja se na začelje reda
  78. }

Report this snippet  

You need to login to post a comment.