Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- // void *malloc(size_t size); // rezerwuje size bajtów i zwraca wskaźnik do pierwszego z nich
- // void free(void *ptr); // zwalnia cały wcześniej zarezerwowany obszar pamięci
- // void *realloc(void *ptr, size_t size); // zmienia rozmiar wskazanego obszaru pamięci
- // sizeof(void *ptr); // zwraca rozmiar obiektu z bajtach
- // sizeof(int); // zwróci rozmiar inta
- void add_elem_lifo(int **tab, int *tab_size, int elem)
- {
- // jeśli tablica jest pusta, trzeba ją stworzyć
- if(*tab_size == 0)
- *tab = malloc(0);
- // zwiększyć rozmiar tablicy o jeden
- *tab_size += 1;
- *tab = realloc(*tab, *tab_size*sizeof(int));
- // wpisać element
- (*tab)[*tab_size-1] = elem;
- }
- int get_elem_lifo(int **tab, int *tab_size)
- {
- if(*tab_size <= 0)
- {
- printf("Błąd, koniec tablicy!");
- return 0;
- }
- // zapamiętujemy ostatni element
- int zwrot = (*tab)[*tab_size-1];
- // zwalniamy ostatni element
- *tab_size -= 1;
- if(*tab_size == 0)
- {
- free(*tab);
- *tab = NULL;
- }
- else
- *tab = realloc(*tab, *tab_size*sizeof(int));
- return(zwrot);
- }
- int get_elem_fifo(int **tab, int *tab_size)
- {
- if(*tab_size <= 0)
- {
- printf("Błąd, koniec tablicy!");
- return 0;
- }
- // zapamiętujemy pierwszy element
- int zwrot = (*tab)[0];
- // zwalniamy ostatni element
- *tab_size -= 1;
- if(*tab_size == 0)
- {
- free(*tab);
- *tab = NULL;
- }
- else
- {
- for(int i = 0; i < *tab_size; i++)
- {
- (*tab)[i] = (*tab)[i+1];
- }
- *tab = realloc(*tab, *tab_size*sizeof(int));
- }
- return(zwrot);
- }
- void add_elem_lista(int **tab, int *tab_size, int gdzie, int elem)
- {
- if(gdzie > *tab_size || gdzie < 0)
- {
- printf("You are trying to place element outside this list!");
- return;
- }
- // jeśli tablica jest pusta, trzeba ją stworzyć
- if(*tab_size == 0)
- *tab = malloc(0);
- *tab_size += 1;
- int *tab2;
- tab2 = malloc(*tab_size*sizeof(int));
- for(int i = 0; i < gdzie; i++)
- tab2[i] = *tab[i];
- tab2[gdzie] = elem;
- for(int i = gdzie+1; i < *tab_size; i++)
- tab2[i] = *tab[i-1];
- free(*tab);
- *tab = tab2;
- }
- int get_elem_lista(int **tab, int *tab_size, int ktory)
- {
- if(*tab_size <= 0)
- {
- printf("Błąd, koniec tablicy!");
- return 0;
- }
- // zapamiętujemy ostatni element
- int zwrot = (*tab)[*tab_size-1];
- // zwalniamy ostatni element
- *tab_size -= 1;
- if(*tab_size == 0)
- {
- free(*tab);
- *tab = NULL;
- }
- else
- *tab = realloc(*tab, *tab_size*sizeof(int));
- return(zwrot);
- }
- void show_tab(int *tab, int tab_size)
- {
- int i = 0;
- for(i = 0; i < tab_size; i++)
- {
- printf("%d ", tab[i]);
- }
- printf("\n\n");
- }
- int main()
- {
- // stos - LIFO - last in first out
- int *lifo = NULL;
- int lifo_size = 0;
- printf("\nLIFO example\n");
- add_elem_lifo(&lifo, &lifo_size, 5);
- show_tab(lifo, lifo_size);
- add_elem_lifo(&lifo, &lifo_size, 7);
- show_tab(lifo, lifo_size);
- add_elem_lifo(&lifo, &lifo_size, 4);
- show_tab(lifo, lifo_size);
- int trzeci = get_elem_lifo(&lifo, &lifo_size);
- int drugi = get_elem_lifo(&lifo, &lifo_size);
- int pierwszy = get_elem_lifo(&lifo, &lifo_size);
- //int pierwszy = -1;
- printf("Elemnety pobrane przez get_elem_lifo: %d %d %d", pierwszy, drugi, trzeci);
- // kolejka - FIFO - first in first out
- // dodawanie elementów na końcu działa dokładnie tak samo jak w lifo, dlatego add_elem_fifo powinno
- // wyglądać dokładnie tak samo jak add_elem_lifo - nie ma sensu pisać tego jeszcze raz, używam wersji dla lifo
- printf("\n\nFIFO example\n");
- int *fifo = NULL;
- int fifo_size = 0;
- add_elem_lifo(&fifo, &fifo_size, 5);
- show_tab(fifo, fifo_size);
- add_elem_lifo(&fifo, &fifo_size, 7);
- show_tab(fifo, fifo_size);
- add_elem_lifo(&fifo, &fifo_size, 4);
- show_tab(fifo, fifo_size);
- pierwszy = get_elem_fifo(&fifo, &fifo_size);
- drugi = get_elem_fifo(&fifo, &fifo_size);
- trzeci = get_elem_fifo(&fifo, &fifo_size);
- printf("Elemnety pobrane przez get_elem_fifo: %d %d %d", pierwszy, drugi, trzeci);
- // Lista - dodawanie i odejmowanie elementów z dowolnego miejsca w ciągu
- printf("\n\nLista example\n");
- int *lista = NULL;
- int lista_size = 0;
- add_elem_lista(&lista, &lista_size, 0, 5);
- show_tab(lista, lista_size);
- add_elem_lista(&lista, &lista_size, 0, 7);
- show_tab(lista, lista_size);
- add_elem_lista(&lista, &lista_size, 0, 4);
- show_tab(lista, lista_size);
- add_elem_lista(&lista, &lista_size, 0, 3);
- show_tab(lista, lista_size);
- if(lifo != NULL) free(lifo);
- if(fifo != NULL) free(fifo);
- if(lista != NULL) free(lista);
- printf("\n\n\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement