Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. void stack_realloc (struct Stack * s);
  2.  
  3. struct Stack *stack_create(int size)
  4. {
  5. struct Stack *s;
  6. s = (struct Stack *) calloc (1, sizeof (struct Stack));
  7. s->a = (Data *) calloc (size, sizeof (Data));
  8. s->n = 0;
  9. s->size = size;
  10. return s;
  11. }
  12.  
  13. void stack_push(struct Stack * s, Data x)
  14. {
  15. if (s->n >= s->size)
  16. stack_realloc (s);
  17. if (s->n < s->size) {
  18. s->a[s->n] = x;
  19. s->n++;
  20. }
  21. }
  22.  
  23. Data stack_pop(struct Stack * s)
  24. {
  25. if (s->n > 0) {
  26. s->n--;
  27. return s->a[s->n];
  28. }
  29. return -1;
  30. }
  31.  
  32. Data stack_get(struct Stack * s)
  33. {
  34. if (s->n > 0)
  35. return s->a[s->n - 1];
  36. return -1;
  37. }
  38.  
  39. void stack_print(struct Stack * s)
  40. {
  41. if (s->n == 0) {
  42. printf ("Empty stack\n");
  43. return;
  44. }
  45. for (size_t i = 0; i < s->n; i++) {
  46. printf ("%d ", s->a[i]);
  47. }
  48. printf ("\n");
  49. }
  50.  
  51. int stack_size(struct Stack * s)
  52. {
  53. return s->n;
  54. }
  55.  
  56. void stack_clear(struct Stack * s)
  57. {
  58. s->n = 0;
  59. for (size_t i = 0; i < s->size; i++)
  60. s->a[i] = 0;
  61. }
  62.  
  63. void stack_destroy(struct Stack * s)
  64. {
  65. s->n = 0;
  66. free (s->a);
  67. free (s);
  68. }
  69.  
  70. void stack_realloc (struct Stack * s)
  71. {
  72. Data *na = (Data *) calloc (s->size * 2, sizeof (Data));
  73. for (int i = 0; i < s->size; i++)
  74. na[i] = s->a[i];
  75. free (s->a);
  76. s->a = na;
  77. s->size = 2 * s->size;
  78. }
  79.  
  80. int stack_is_empty(struct Stack * s)
  81. {
  82. if (s->n == 0) return 1;
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement