Facebook
From Cobalt Curlew, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 253
  1. ------------------------------------------HEADER PIERWSZY
  2. #pragma once
  3. struct MY_STOS
  4. {
  5.         void *wsk_data;    //wskaznik do danych typu void *
  6.         MY_STOS *wsk_prev; // kolejny elem
  7. };
  8.  
  9. typedef void(*FreeData)(void *wsk_dat);                        //Definicja typu: wskaznik do funkcji z prototypem void NazwaFunkcji(void *);
  10. typedef int (CompData)(void * wsk_curData, void * wsk_SearchData);
  11.  
  12. void stack_int(FreeData wsk_fun_free);
  13. void stack_free();
  14. MY_STOS* stack_push(void* wsk_dat);
  15. MY_STOS stack_pop();
  16. ----------------------------------------------KONIEC HEADERA PIERWSZEGO, POCZATEK DRUGIEGO
  17. #pragma once
  18.  
  19. enum MY_MESSAGES
  20. {
  21.         MY_MESS_ALLOC_ERROR_STOS,
  22.         MY_MESS_BAD_NUMBER,
  23.         MY_MESS_TOTAL
  24. };
  25.  
  26.  
  27. void my_mess_fun(enum MY_MESSAGES mess);
  28. ------------------------------------------------------POCZATEK KODU
  29. #include "my_stos.h"
  30. #include "my_msg.h"
  31. #include "stdafx.h"
  32.  
  33. int last_elem = 0;
  34. static MY_STOS *top = NULL;
  35. FreeData wsk_freedata;
  36.  
  37. void stack_int(FreeData wsk_fun_free)
  38. {
  39.         top = NULL;
  40.         wsk_freedata = wsk_fun_free;
  41. }
  42.  
  43. void stack_free()
  44. {
  45.         MY_STOS *p = top, *ptmp = NULL;
  46.         while (p)
  47.         {
  48.                 (*wsk_freedata)(p->wsk_data); // zwolnienie danych z biezacego elemntu
  49.                 ptmp = p;  //pomocnicza
  50.                 p = p->wsk_prev; // przestawienie wskaznika
  51.                 free(ptmp); // zwolnienie biezacego elementu
  52.         }
  53.         top = NULL;
  54. }
  55.  
  56. MY_STOS *stack_push(void *wsk_dat)
  57. {
  58.         //alokujemy pamiec dla nowego elementu kolejki
  59.         MY_STOS* current = (MY_STOS*)malloc(sizeof(MY_STOS));
  60.         if (!current)
  61.         {
  62.                 my_mess_fun(MY_MESS_ALLOC_ERROR_STOS);
  63.                 return NULL;
  64.         }
  65.         current->wsk_prev = top; // nowy element wskazuje na gorny
  66.         top = current; // potem zostanie gornym
  67.         return current;
  68. }
  69.  
  70. MY_STOS stack_pop()
  71. {
  72.         MY_STOS temp;
  73.         MY_STOS *next;
  74.         if (!top)
  75.         {
  76.                 temp.wsk_data = NULL;
  77.                 temp.wsk_prev = NULL;
  78.         }
  79.         else
  80.         {
  81.                 next = top->wsk_prev;
  82.                 temp.wsk_data = top->wsk_data; // pobieramy wartosc
  83.                 free(top);
  84.         }
  85. }