Advertisement
Guest User

Untitled

a guest
May 21st, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.98 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // void *malloc(size_t size); // rezerwuje size bajtów i zwraca wskaźnik do pierwszego z nich
  5. // void free(void *ptr); // zwalnia cały wcześniej zarezerwowany obszar pamięci
  6. // void *realloc(void *ptr, size_t size); // zmienia rozmiar wskazanego obszaru pamięci
  7. // sizeof(void *ptr); // zwraca rozmiar obiektu z bajtach
  8. // sizeof(int); // zwróci rozmiar inta
  9.  
  10. void add_elem_lifo(int **tab, int *tab_size, int elem)
  11. {
  12.     // jeśli tablica jest pusta, trzeba ją stworzyć
  13.     if(*tab_size == 0)
  14.         *tab = malloc(0);
  15.     // zwiększyć rozmiar tablicy o jeden
  16.     *tab_size += 1;
  17.     *tab = realloc(*tab, *tab_size*sizeof(int));
  18.     // wpisać element
  19.     (*tab)[*tab_size-1] = elem;
  20. }
  21.  
  22. int get_elem_lifo(int **tab, int *tab_size)
  23. {
  24.     if(*tab_size <= 0)
  25.     {
  26.         printf("Błąd, koniec tablicy!");
  27.         return 0;
  28.     }
  29.     // zapamiętujemy ostatni element
  30.     int zwrot = (*tab)[*tab_size-1];
  31.     // zwalniamy ostatni element
  32.     *tab_size -= 1;
  33.     if(*tab_size == 0)
  34.     {
  35.         free(*tab);
  36.         *tab = NULL;
  37.     }
  38.     else
  39.         *tab = realloc(*tab, *tab_size*sizeof(int));
  40.     return(zwrot);
  41. }
  42.  
  43. int get_elem_fifo(int **tab, int *tab_size)
  44. {
  45.     if(*tab_size <= 0)
  46.     {
  47.         printf("Błąd, koniec tablicy!");
  48.         return 0;
  49.     }
  50.     // zapamiętujemy pierwszy element
  51.     int zwrot = (*tab)[0];
  52.     // zwalniamy ostatni element
  53.     *tab_size -= 1;
  54.     if(*tab_size == 0)
  55.     {
  56.         free(*tab);
  57.         *tab = NULL;
  58.     }
  59.     else
  60.     {
  61.         for(int i = 0; i < *tab_size; i++)
  62.         {
  63.             (*tab)[i] = (*tab)[i+1];
  64.         }
  65.         *tab = realloc(*tab, *tab_size*sizeof(int));
  66.  
  67.     }
  68.     return(zwrot);
  69. }
  70.  
  71. void add_elem_lista(int **tab, int *tab_size, int gdzie, int elem)
  72. {
  73.     if(gdzie > *tab_size || gdzie < 0)
  74.     {
  75.         printf("You are trying to place element outside this list!");
  76.         return;
  77.     }
  78.     // jeśli tablica jest pusta, trzeba ją stworzyć
  79.     if(*tab_size == 0)
  80.         *tab = malloc(0);
  81.     *tab_size += 1;
  82.     int *tab2;
  83.     tab2 = malloc(*tab_size*sizeof(int));
  84.     for(int i = 0; i < gdzie; i++)
  85.         tab2[i] = *tab[i];
  86.     tab2[gdzie] = elem;
  87.     for(int i = gdzie+1; i < *tab_size; i++)
  88.         tab2[i] = *tab[i-1];
  89.     free(*tab);
  90.     *tab = tab2;
  91. }
  92.  
  93. int get_elem_lista(int **tab, int *tab_size, int ktory)
  94. {
  95.     if(*tab_size <= 0)
  96.     {
  97.         printf("Błąd, koniec tablicy!");
  98.         return 0;
  99.     }
  100.     // zapamiętujemy ostatni element
  101.     int zwrot = (*tab)[*tab_size-1];
  102.     // zwalniamy ostatni element
  103.     *tab_size -= 1;
  104.     if(*tab_size == 0)
  105.     {
  106.         free(*tab);
  107.         *tab = NULL;
  108.     }
  109.     else
  110.         *tab = realloc(*tab, *tab_size*sizeof(int));
  111.     return(zwrot);
  112. }
  113.  
  114. void show_tab(int *tab, int tab_size)
  115. {
  116.     int i = 0;
  117.     for(i = 0; i < tab_size; i++)
  118.     {
  119.         printf("%d ", tab[i]);
  120.     }
  121.     printf("\n\n");
  122. }
  123.  
  124. int main()
  125. {
  126.     // stos - LIFO - last in first out
  127.     int *lifo = NULL;
  128.     int lifo_size = 0;
  129.  
  130.     printf("\nLIFO example\n");
  131.     add_elem_lifo(&lifo, &lifo_size, 5);
  132.     show_tab(lifo, lifo_size);
  133.     add_elem_lifo(&lifo, &lifo_size, 7);
  134.     show_tab(lifo, lifo_size);
  135.     add_elem_lifo(&lifo, &lifo_size, 4);
  136.     show_tab(lifo, lifo_size);
  137.     int trzeci = get_elem_lifo(&lifo, &lifo_size);
  138.     int drugi = get_elem_lifo(&lifo, &lifo_size);
  139.     int pierwszy = get_elem_lifo(&lifo, &lifo_size);
  140.     //int pierwszy = -1;
  141.     printf("Elemnety pobrane przez get_elem_lifo: %d %d %d", pierwszy, drugi, trzeci);
  142.  
  143.     // kolejka - FIFO - first in first out
  144.     // dodawanie elementów na końcu działa dokładnie tak samo jak w lifo, dlatego add_elem_fifo powinno
  145.     // wyglądać dokładnie tak samo jak add_elem_lifo - nie ma sensu pisać tego jeszcze raz, używam wersji dla lifo
  146.     printf("\n\nFIFO example\n");
  147.     int *fifo = NULL;
  148.     int fifo_size = 0;
  149.     add_elem_lifo(&fifo, &fifo_size, 5);
  150.     show_tab(fifo, fifo_size);
  151.     add_elem_lifo(&fifo, &fifo_size, 7);
  152.     show_tab(fifo, fifo_size);
  153.     add_elem_lifo(&fifo, &fifo_size, 4);
  154.     show_tab(fifo, fifo_size);
  155.  
  156.     pierwszy = get_elem_fifo(&fifo, &fifo_size);
  157.     drugi = get_elem_fifo(&fifo, &fifo_size);
  158.     trzeci = get_elem_fifo(&fifo, &fifo_size);
  159.  
  160.     printf("Elemnety pobrane przez get_elem_fifo: %d %d %d", pierwszy, drugi, trzeci);
  161.  
  162.     // Lista - dodawanie i odejmowanie elementów z dowolnego miejsca w ciągu
  163.     printf("\n\nLista example\n");
  164.     int *lista = NULL;
  165.     int lista_size = 0;
  166.  
  167.     add_elem_lista(&lista, &lista_size, 0, 5);
  168.     show_tab(lista, lista_size);
  169.     add_elem_lista(&lista, &lista_size, 0, 7);
  170.     show_tab(lista, lista_size);
  171.     add_elem_lista(&lista, &lista_size, 0, 4);
  172.     show_tab(lista, lista_size);
  173.     add_elem_lista(&lista, &lista_size, 0, 3);
  174.     show_tab(lista, lista_size);
  175.  
  176.     if(lifo != NULL) free(lifo);
  177.     if(fifo != NULL) free(fifo);
  178.     if(lista != NULL) free(lista);
  179.     printf("\n\n\n");
  180.     return 0;
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement