Posted By

maretic_kristian on 12/03/11


Tagged

red polje implementacija reda


Versions (?)

Red_polje.h


 / Published in: C++
 

URL: /

Implementacija reda pomocu cirkularnog polja

  1. // Implementacija programa pomoću polja - Kristian Maretić
  2.  
  3.  
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. #define velicina_reda 10000 // definiranje veličine reda
  8.  
  9. typedef int el_reda_ordinacije;
  10. typedef struct red_ordinacija red;
  11.  
  12. struct pacijent // struktura podataka koji se zapisuju u red
  13. {
  14. int x, y; // random upisani brojevi
  15. int rb_pacijenta; // redni broj pacijenta
  16. int prioritet; // prioritet pacijenta
  17. };
  18.  
  19.  
  20. struct red_ordinacija // struktura reda
  21. {
  22. pacijent p[velicina_reda]; // vrijednost elementa u redu (svakog pacijenta)
  23. el_reda_ordinacije front,rear; // definiranje prvog i poslijednjeg elementa reda
  24. };
  25.  
  26. int AddOne(int n) // provjera ostatak cjelobrojnog dijeljenja (modulo) reara/ ili fonta s ukupnom veličinom reda
  27. {
  28. return((n+1)%velicina_reda); // vraća ostatk cjelobrojnog dijeljenjadijeljenja
  29. }
  30.  
  31. bool IsEmptyQ(red *_r) // provjera je li red prazan
  32. {
  33. bool retVal;
  34. if( AddOne(_r -> rear)== _r -> front) // provjera cirkularnog polja ukoliko je ostatak cjelobrojnog djeljenja posljednjeg elementa u redu
  35. { // i veličine reda jednak prvom elementu reda, red je prazan
  36. retVal = true;
  37. }
  38. else
  39. {
  40. retVal = false;
  41. }
  42. return retVal;
  43. }
  44.  
  45. void InitQ(red *_r) // inicijalizacija praznog reda
  46. {
  47. _r -> front = 0; // red je inicijaliziran ako se zauzme cijela njegova veličina - čelo na 0-tu adresu
  48. _r -> rear = velicina_reda-1; // začelje na 9999-tu adresu
  49. }
  50.  
  51. pacijent FrontQ(red *_r) // vraćanje vrijednosti elementa koji se nalazi na čelu reda
  52. {
  53. if (!IsEmptyQ(_r)) // provjera da li je red prazan
  54. {
  55. return _r -> p [_r -> front]; // postavlja pacijentu vrijednost elementa sa čela reda
  56. }
  57. }
  58.  
  59. void DeQueueQ(red *_r) // brisanje elementa s čela reda
  60. {
  61. if (!IsEmptyQ(_r)) // provjera da li je red prazan
  62. {
  63. _r -> front = AddOne(_r -> front); // adresa čela reda je ostatak cjelobrojnog djeljenja trenutnog čela reda i ukupne veličine reda
  64. }
  65. }
  66.  
  67. void EnQueueQ (pacijent x, red *_r) // dodavanje novog elementa na začelje reda
  68. {
  69. _r -> rear = AddOne(_r->rear); // postavljanje novog elementa na začelje (pacijenta) - povečanje je ostatak cjelobrojnog djeljenja veličine reda i
  70. // adrese elementa začelja
  71. _r -> p [_r -> rear]= x; // postavljanje vrijednosti pacijenta u element na začelju reda
  72. }

Report this snippet  

You need to login to post a comment.