Advertisement
dgulczynski

Struktura Kolejki

Nov 23rd, 2017
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. struct Kolejka{
  6.     int rozmiar;
  7.     double* tab;
  8.     double* poc;
  9.     double* kon;
  10. };
  11. typedef struct Kolejka Kolejka;
  12.  
  13. Kolejka nowaKolejka(int rozmiar){
  14.     Kolejka k;
  15.     k.rozmiar=rozmiar;
  16.     k.tab=malloc(rozmiar*sizeof(double));
  17.     if(k.tab==NULL){
  18.         printf("Brak pamieci");
  19.         exit(1);
  20.     }
  21.     k.poc=k.tab;
  22.     k.kon=k.poc;
  23.     return k;
  24. }
  25.  
  26. void dodaj(Kolejka* k, double d){
  27.     if(k->kon==k->poc+k->rozmiar){
  28.         if(k->poc < k->tab){
  29.             k->kon=k->tab;
  30.             *(k->kon)=d;
  31.             k->kon++;
  32.         }
  33.         else{
  34.             k->tab=(double*)realloc(k->tab, k->rozmiar*2);
  35.             *(k->kon)=d;
  36.             k->kon++;
  37.         }
  38.     }else{
  39.         *(k->kon)=d;
  40.         k->kon++;
  41.         if(k->kon == k->poc){
  42.             k->rozmiar*=2;
  43.             k->poc= k->poc - k->tab; k->kon = k->rozmiar;
  44.             k->tab=(double*)realloc(k->tab, k->rozmiar);
  45.             k->poc = k->poc + k->tab; k->kon = k->kon + k->tab;
  46.             for(double* i = k->tab; i<k->poc; i++)
  47.                 *(k->kon++)=*i;
  48.         }
  49.     }
  50. }
  51.  
  52. double pobierz(Kolejka* k){
  53.     if(k->poc!=k->kon)
  54.         return *k->poc++;
  55.     else return NAN;
  56. }
  57.  
  58. _Bool czyPusta(Kolejka* k){
  59.     if(k->poc==k->kon) return 1;
  60.     else return 0;
  61. }
  62.  
  63. void oproznij(Kolejka* k){
  64.     k->poc=k->tab;
  65.     k->kon=k->poc;
  66. }
  67.  
  68. void wypisz(Kolejka *k){
  69.     printf("\npoc: %p kon: %p \n", k->poc, k->kon);
  70.     for(double* i = k->poc; i<k->kon; i++)
  71.         printf("%f\t",*i);
  72.     printf("\n");
  73. }
  74.  
  75. int main(){
  76.     Kolejka k = nowaKolejka(3);
  77.     dodaj(&k, 1);
  78.     wypisz(&k);
  79.     dodaj(&k, 2);
  80.     wypisz(&k);
  81.     dodaj(&k, 3);
  82.     printf("%f\n", pobierz(&k));
  83.     dodaj(&k, 4);
  84.     wypisz(&k);
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement